Results 1 to 13 of 13

Thread: benaderen componenten via een viariabele

  1. #1
    Senior Member
    Join Date
    Feb 2004
    Location
    Den Haag
    Posts
    152

    benaderen componenten via een viariabele

    hallo,

    ik moet op een form 108 checkboxen aan of uit zetten. (9 niveau van uitbel rechten, per niveau 12 mogelijke permissie (van slechts intern tot internationaal))
    De configuratie staat in de database.
    Als het bewuste scherm open wil ik uit de configuratie uit database weergeven op het form.
    Bovenstaande wil ik doen door de naam van de checkboxen in loopjes te concateneren en vervolgens met die naam de checkbox te benaderen.

    dus iets als:
    Code:
    var 
      I,J: integer
      sCompNaam : string
    .....
      For I := 1 to 9 do
      begin
         for J := 1 to 12 do
         begin
           sCompNaam := Concat('cb', intToStr(I), intToStr(J));
           Form.sCompNaam.checked := ........
         end
       end
    .....
    Bovenstaande werkt natuurlijk niet, maar hoe werkt dit wel?

    thx

    JWI

  2. #2
    *+E13818MU01F0F* Norrit's Avatar
    Join Date
    Aug 2001
    Location
    Landgraaf
    Posts
    967
    TCheckBox(FindComponent('een naampje')).Checked := ...
    Objective reality is a delirium caused by lack of alcohol in blood

  3. #3
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Dan moet FindComponent('een naampje') wel daadwerkelijk een component vinden, anders
    krijg je een AV; ik kan me zo voorstellen dat als "een naampje" niet bestaat, dat die functie
    dan Nil retour geeft (de Delphi help zegt daar verder niets over bij mij...)
    Je krijgt ook problemen als blijkt dat "een naampje" geen TCheckBox is maar
    bijvoorbeeld een TLabel of zo...

    Iets beter zou het dus zijn om daar eerst op te controleren, zoals bijvoorbeeld:
    Delphi Code:
    1. Procedure TForm1.SetCheck(AName : String; AValue : Boolean);
    2. Var
    3.   C : TComponent;
    4. Begin
    5.   C := FindComponent(AName);
    6.   If Assigned(C) And
    7.      (C Is TCheckBox) Then
    8.     TCheckBox(C).Checked := AValue;
    9. End;
    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  4. #4
    Best erg hoe vaak dit voorbij komt.

  5. #5
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Het is dan ook al jaren een FAQ.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  6. #6
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    't Maakt mij niet zoveel uit: ik probeer iedereen altijd van een antwoord te voorzien (indien
    mogelijk), zelfs als het antwoord al 100 keer gegeven is

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  7. #7
    Jep. Probleem is deels misschien aan niet intensief genoeg zoeken, maar vooral ook dat sommige vragen echte beginnersvragen zijn. En beginners weten nu eenmaal nog niet exact alle termen en kunnen daardoor wat minder makkelijk de juiste variatie op hun zoekopdracht uitpluizen.
    1+1=b

  8. #8
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Buiten dat is de TS een Hagenees en die hebben bij mij altijd een streepje voor
    TMemoryLeak.Create(Nil);

  9. #9
    Senior Member
    Join Date
    Feb 2004
    Location
    Den Haag
    Posts
    152
    Bedankt voor de antwoorden!

    Ik heb inderdaad behoorlijk gezocht maar niet gevonden. Hopelijk wordt me dit niet al te kwalijk genomen......


    JWI

  10. #10
    Verplicht laten lezen van de FAQ bij aanmaken thread, ik dacht dat er zo iets was. Je kreeg een link naar de FAQ bij aanmaken thread?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  11. #11
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Het wordt een beetje off-topic, maar dat heeft totaal geen zin, is mijn ervaring...

    Ik ben moderator op diverse fora en heb gemerkt dat het niet uitmaakt hoeveel stickies,
    announcements of knipperende teksten je op een forum plaatst, gebruikers (vooral nieuwe)
    maken meteen een nieuwe thread aan, zonder eerst te kijken of hij wellicht al eens eerder
    beantwoord is.

    Vaak is het zelfs zo dat een thread met het antwoord op hun vraag direct boven of onder
    die van hun staat...

    Ik heb er mee leren leven en het geeft mij weer een excuus om teksten te kunnen tikken
    en m'n postcount op te hogen

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  12. #12
    Senior Member
    Join Date
    Feb 2004
    Location
    Den Haag
    Posts
    152
    toch nog een vraagje.....

    Hoe werkt dit als ik op een ander form wil kijken?

    dit wekt niet:

    cbName := 'CorFrm.cb1' + IntToStr(i);
    TCheckBox(FindComponent(cbName)).Checked := ....;


    JWI

  13. #13
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Dan moet je de FindComponent-functie aanroepen van dat andere form.

    Even uitgaande van 2 forms (TForm1/Unit1 en TForm2/Unit2):
    Delphi Code:
    1. Implementation
    2.  
    3. Uses
    4.   Unit2;
    5.  
    6. Procedure TForm1.SetCheckOnForm2;
    7. Begin
    8.   TCheckBox(Form2.FindComponent('cb1')).Checked := True;
    9. End;
    Let wel: dit is niet de meest ideale manier om het zo te doen, maar het moet zo werken.

    [EDIT]
    Een tijd geleden heb ik 's een proof-of-concept gemaakt met RTTI.
    Ik schat zo in dat je nog niet zover bent om het te begrijpen, maar ik zal het in ieder
    geval even plaatsen om je een idee te geven.

    Met dit stukje code kun je een bepaalde control (of zelfs ieder object met published-
    properties) direct aansturen met een string, zoals bijvoorbeeld:
    Code:
    Label1.Caption=Dit is een test
    of
    Button1.Visible=False
    Waarschijnlijk is er een eenvoudiger manier, maar ik maakte dit destijds alleen
    als klein testje
    [/EDIT]

    Greetz,

    Peter.
    Attached Files Attached Files
    Last edited by VideoRipper; 19-Feb-10 at 20:12.
    TMemoryLeak.Create(Nil);

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
  •