Results 1 to 7 of 7

Thread: Aanspreken variabele

  1. #1

    Aanspreken variabele

    Hallo,

    Ik gebruik een hoofdformulier waar ik in een procedure een ander formulier aanroep.
    Dit kan één of meerdere keren gebeuren.
    De loop variabele moet blijkbaar in de procedure gedefinieerd worden.
    Nu wil ik de waarde van deze loop in het aangeroepen formulier gebruiken.
    Maar dit lukt niet. Ik krijg telkens een foutmelding van Undeclared identifier.

    Hoe kan ik deze waarde doorgeven in mijn aangeroepen forumulier?

    Alvast bedankt

    Lainkes

  2. #2
    Variabelen hebben een bepaalde zichtbaarheid.De variabele die je in een loop gebruikt zijn meestal alleen zichtbaar binnen de methode waar je de loopt hebt neergezet. Hier is een linkje naar een topic op stackoverflow van iemand met een soort gelijk probleem.

  3. #3
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Zonder code kunnen we niet precies weten wat je bedoeling is. Als je het werk binnen de tweede form daar definieert als een procedure, kan je wel de waarde van de loop-variabele van op dat moment doorgeven. Maar de loop variabele moet inderdaad een lokale variabele zijn omdat de compiler daar mogelijk wat optimalisatie-magie op toepast.

  4. #4
    Dit is de code in mijn hoofdformulier.
    Ik roep form_test op.

    Delphi Code:
    1. for seq_counter := 1 to UpDown1.Position do
    2.     begin
    3.       // Een soort aftelling zodat de patient zich kan voorbereiden. Van 5 naar 1
    4.       if seq_counter = 1 then
    5.         begin
    6.           if form_progressbar.ShowModal = mrOK then
    7.             begin
    8.               if form_test.ShowModal <> mrOK then exit; // <-- alleen doorgaan als ShowModal mrOk is
    9.             end;
    10.         end
    11.       else
    12.         begin
    13.           if form_test.ShowModal <> mrOK then exit; // <-- alleen doorgaan als ShowModal mrOk is
    14.         end;
    15.     end;

    En in form_test maak ik gebruik van de variabele "seq_counter"

    Delphi Code:
    1. full_path_file_name := form_main.results_path + '\' + full_name + '_' + IntToStr(myDay) + IntToStr(myMonth) + IntToStr(myYear) + IntToStr(myHour) + IntToStr(myMin) + intToStr([B]form_main.seq_counter[/B]) + '.res';
    2.       AssignFile(f_result, full_path_file_name);

    Lainkes

  5. #5
    Bedoel je zoiets?
    Attached Files Attached Files

  6. #6
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Ik zou dit soort code direct afkeuren want het is verschrikkelijk rommelig en zit vol met "Slechte" code.

    Maar goed... als ik je goed begrijp wil je dat form_test iets doet bij het showen?

    Hier een quick hack, waar ik overigens ook niet achter zou staan:
    • Haal Tform_main uit de uses van Tform_test (hij hoort daar niet)
    • Maak in Tform_test een private variable aan binnen de Tform_test-klasse voor het resultaatpad en het sequentienummer
    • Schrijf een functie in TForm_Test met een variabele die het pad en de seq_counter kan doorgeven en een TModalResult teruggeeft
    • Roep deze functie vanuit je hoofdformulier aan


    In code zou het er ongeveer zo uit kunnen zien:
    Delphi Code:
    1. type
    2.   TForm_Test = class(TForm)
    3.   // diverse standaardzaken zoals de controls die op het form staan (bestaande code)
    4.   private
    5.     FResultsPath: string;
    6.     FSequenceNumber: Integer;
    7.   public
    8.     // Bestaande code hier
    9.     function ShowSequence(APatch: string; ANumber: Integer): TModalResult;
    10.   end;
    11.  
    12. implementation
    13.  
    14. procedure TForm_Test.BestaandeCode; // dit is de method waarin je je bestaande code hebt zitten
    15. begin
    16.   // Knip
    17.   full_path_file_name := FResultsPath + '\' + full_name + '_' + IntToStr(myDay) + IntToStr(myMonth) + IntToStr(myYear) + IntToStr(myHour) + IntToStr(myMin) + intToStr(FSequenceNumber) + '.res'
    18.   AssignFile(f_result, full_path_file_name);
    19.   // Knip
    20. end;
    21.  
    22. function TForm_Test.ShowSequence(APath: string; ANumber: Integer): TModalResult;
    23. begin
    24.   FResultsPath := APath;
    25.   FSequenceNumber := ANumber;
    26.   Result := ShowModal;
    27. end;

    Vervang vervolgens in je form_main de regels met:
    Delphi Code:
    1. if form_test.ShowModal <> mrOK then exit; // <-- alleen doorgaan als ShowModal mrOk is
    in
    Delphi Code:
    1. if form_test.(results_path, seq_counter) <> mrOK then exit; // <-- alleen doorgaan als ShowModal mrOk is
    TMemoryLeak.Create(Nil);

  7. #7
    Bedankt voor de feedback.
    Waarom is de code rommelig? Hoe kan ik dit verbeteren?

    Alle hulp is welkom.

    Lainkes

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •