Results 1 to 4 of 4

Thread: Commando met variabele samengesteld uitvoeren

  1. #1

    Commando met variabele samengesteld uitvoeren

    Ik zit al enige tijd te experimenteren met iets dat maar niet lukt.
    Misschien kan het wel niet en daarom wil ik het hier eens vragen.

    Ik vul 4 X 59 TEdit's. Dat doe ik nu door 4 X 59 afzonderlijke TEdit's te vullen. Dus met 4 X 59 regels code, zoals in regel1 is te zien.

    Nu wil ik dit graag vervangen door 4 X een for /next loop van 1 tot 59 te gebruiken maar dat lukt me niet.

    Hierbij en regel code die ik hiervoor gebruik.

    Delphi Code:
    1. eT59.Text := IntToStr(pDetectorGainDet1_NR.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])

    De vier mogelijkheden zijn:

    Det1 NR ofwel pDetectorGainDet1_NR [1 .. 59]
    Det1 ER ofwel pDetectorGainDet1_ER [1 .. 59]
    Det2 NR ofwel pDetectorGainDet2_NR [1 .. 59]
    Det2 ER ofwel pDetectorGainDet2_ER [1 .. 59]

    Met onderstaande code lukt het niet omdat het als string is samengevoegd en hierdoor niet uitvoerbaar is.

    Delphi Code:
    1. Procedure Test();
    2. var i : integer;
    3. eT    : array[1..59] of TEdit;
    4. aStr, bStr : string;
    5.  
    6. // eT59.Text := IntToStr(pDetectorGainDet1_NR.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])
    7. // eT59.Text := IntToStr(pDetectorGainDet2_ER.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])
    8. // eT59.Text := IntToStr(pDetectorGainDet1_NR.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])
    9. // eT59.Text := IntToStr(pDetectorGainDet2_ER.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])
    10.  
    11. // eT is TEdit [1  59]
    12. // is een combo box
    13.  
    14. begin
    15.      for i := 1 to 59
    16.       do
    17.        begin
    18.          aStr := 'pDetectorGainDet1_NR.PMT' + inttostr(i);
    19.          bStr := '[cbPMTCalDatum.ItemIndex]';
    20.          eT[i].Text := (aStr + bStr);
    21.        end;
    22. end;

    Ik wil dus als uitvoerbare code:
    eT[i].Text := IntToStr(pDetectorGainDet1_NR.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])
    samenstellen. Waarbij Det1, Det2, NR, ER, en PMT ..59 variabelen zijn.

    Kan dit wel ??

    Ahhhh, Ik denk dat ik mijn record moet aanpassen, een record in een record:

    Delphi Code:
    1. type
    2.    TDetectorGainDet1_NR = record
    3.      AantalGainMetingen: integer;
    4.      IndexDatum        : integer;
    5.      Datum:  Array[0..999] of string;
    6.      HVDAC:  Array[0..999] of integer;
    7.      PMT1 :  Array[0..999] of integer;
    8.      PMT2 :  Array[0..999] of integer;
    9.      PMT3 :  Array[0..999] of integer;
    10.      PMT4 :  Array[0..999] of integer;
    11.      PMT5 :  Array[0..999] of integer;
    12.      PMT6 :  Array[0..999] of integer;
    13.     ..
    14.      PMT56 : Array[0..999] of integer;
    15.      PMT57 : Array[0..999] of integer;
    16.      PMT58 : Array[0..999] of integer;
    17.      PMT59 : Array[0..999] of integer;
    18.    end;
    19.   ptrTDetectorGainDet1_NR = ^TDetectorGainDet1_NR;

    Of een apart record voor PMT zoals PMT[1..59]
    Last edited by Unit1; 22-Jul-18 at 00:15.

  2. #2
    Wat werkt er niet aan deze code? Welke foutmelding krijg je? Bestaat eT[i] wel? Los van de spatie tussen 59 en [ zie ik niks vreemds.

    Code:
    eT[i].Text := IntToStr(pDetectorGainDet1_NR.PMT59 [MainForm.cbPMTCalDatum.ItemIndex])

  3. #3
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,313
    Ik heb werkelijk geen idee wat je precies probeert te doen.

    Bestaan de TEdits die in de array staan (heb je ze aangemaakt met .Create) en wie is de owner?
    Waar staan die TEdits op (wat is hun Parent)?

    Qua structuur (zoals ik je opzet nu begrijp) zou ik dit soort constructies afkeuren, maar soms kun
    je niet anders (of is het sneller/makkelijker dan om het netjes te doen) en dan kun je componenten
    en controls gewoon zoeken (Owner.FindComponent) of aflopen (Owner.Components).

    Als ik jouw probleem correct begrijp, heb je een form met 59 TEdits, dus is FindComponent de meest
    bruikbare method:

    Delphi Code:
    1. procedure TForm1.VulEditsMetGetallen;
    2. var
    3.   C: TComponent;
    4.   I: Integer;
    5. begin
    6.   for I := 1 to 59 do
    7.   begin
    8.     C = Self.FindComponent('eT' + IntToStr(I)); // Self kan ook een andere form zijn als de TEdits daar op staan
    9.     if C is TEdit then // is het gevonden component een TEdit (wanneer component niet gevonden kan worden dan is C nil is en is deze dus ook geen TEdit)?
    10.       TEdit(C).Text := Format('Ik ben TEdit nummertje %d', [I]); // gevonden component typecasten naar een TEdit, zodat we bij de Text-property kunnen
    11.   end;
    12. end;
    TMemoryLeak.Create(Nil);

  4. #4
    Ik begrijp het ook niet helemaal, 4 x 59 TEdit componenten... ik zou denken dat het beter is om bvb een memdata table op te vullen en een TDBGrid die de data toont, maar ik kan de opzet natuurlijk verkeerd inschatten.

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
  •