Toon posts:

[delphi] variabele checkbox aanvinken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey Allemaal

Ik heb in delphi twee variabelen, zetletter en zetcijfer, om zo een van de honderd checkboxen aan te vinken. Ik had het volgende bedacht:

code:
1
(zetletter + IntToStr(zetcijfer)).checked := true;


alleen geeft hij hierbij de volgende fout als ik het programma wil testen:

Record, object or class type required

Enig idee hoe ik dit het beste kan aanpakken om toch te laten werken?

alvast bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Delphi is een compiled taal, het is geen taal waar je op die manier (zoals jij het dus doet), componenten kunt accessen.
Je kunt wel met FindControl of FindComponent oid aan de gang gaan, maar eigenlijk is dat een ranzige methode.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je kan natuurlijk ook een functie maken die een bepaalde CheckBox als parameter meeneemt, en dan in die functie de Checked property van die checkbox zetten:

bv:
code:
1
2
3
4
5
6
procedure CheckOrUnCheckCheckBox(TCheckBox aCheckBox)
begin

  aCheckBox.Checked := not aCheckBox.Checked;

end;


Of, als je alle checkboxen in 1x wilt checken/unchecken kan je door de Controls collectie lopen van de control waar de checkboxen op staan, en iedere keer testen of de huidige control een checkbox is. Indien dat het geval is: checked property zetten.

code:
1
2
3
4
5
for Indx := 0 to Self.Controls.Count - 1 do begin
   if Controls[Indx] is TCheckBox then begin
        TCheckBox(Controls[Indx]).Checked := True;
   end;
end;

[ Voor 15% gewijzigd door whoami op 11-09-2003 16:55 ]

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Je weet dat Delphi een gecompileerde taal is, en niet een geinterpreteerde taal? EN je weet ook het verschil hier tussen?

Wat je nu doet is een string (zetletter + inttostr(zetcijfer komt een string uit) gebruiken, en de inhoud van de string gebruiken als object. Leuk idee. Echter de compiler ziet het dus echt als een string, en van een sting kan ie geen object maken (dus vergeet aub die gore ongein als variabele variabelen zoals sommige mensen in PHP wel eens gebruiken).

Ik denk dat je beter een array van checkboxen kan maken, en hierin at runtime de checkboxen aanmaken en op je form zetten. Kan je m.b.v. de array je checkboxen aan en uit zetten. (of beter, skip de array en gebruik een TObjectList)

Overigens heb ik dit soort vragen al een paar keer voorbij zien komen hier in P&W. Met ongeveer hetzelfde antwoord op de vraag als dat ik nu hierboven geef ;)

Whoami, wees eens niet zo snel ;)

[ Voor 4% gewijzigd door Creepy op 11-09-2003 16:58 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
haha ik dacht ook uit m'n php achtergrond aan die string, maar op het moment dat ik poste dacht ik al aan dat delphi een gecompileerde taal is. :) Heb je een kickoff voor die TObjectlist Creepy?

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

De vraag is natuurlijk ook nog eens: met welke reden wil je dit doen en is daar geen betere reden voor? Als jij een CheckBox wil gaan aanvinken zou ik denken dat je bijvoorbeeld een instelling wil tonen. Doe dit dan niet door checkbox B3 aan of uit te zetten, maar maak er een nuttige naam van ofzo....
Kun je de probleemstelling even duidelijk maken voor de nieuwsgierigen onder ons?

Overigens zou ikzelf jouw vraag aanpakken met een array van dynamisch aangemaakt checkboxen. Een ObjectList bijvoorbeeld (hint hint ;))

My personal website


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 11 September 2003 @ 17:00:
haha ik dacht ook uit m'n php achtergrond aan die string, maar op het moment dat ik poste dacht ik al aan dat delphi een gecompileerde taal is. :) Heb je een kickoff voor die TObjectlist Creepy?
Ja.
Delphi -> Help -> Index -> TObjectList

Of beter: typ TOBjectlist in je code window, zet je cursor erop en druk op F1 ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

OZ-Gump schreef op 11 September 2003 @ 17:00:
Overigens zou ikzelf jouw vraag aanpakken met een array van dynamisch aangemaakt checkboxen. Een ObjectList bijvoorbeeld (hint hint ;))
offtopic:
Nou was Whoami mij te snel af, maar jij bent wel erg traag :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Eej Creepy, bedankt he..... ;)

Maar.... maar.... maar... ik ... ik wilde alleen maar aangeven wat ik zou doen! :+

Ontopic: De search hier op GOT doet ook wonderen

[ Voor 10% gewijzigd door OZ-Gump op 11-09-2003 17:04 ]

My personal website


Verwijderd

Topicstarter
speciaal voor OZ... ik moet voor school een kleine game maken, een zeeslagje met een matrix van 10x10 en die boten tekent hij automatisch in als de gebruiker ingeeft of de boot horizontaal moet liggen of verticaal en vervolgens geef je het meest linkse of bovenste punt en dan vult hij hem met een for loop, dat werkt al, maar nu heb ik dat dus met 100 ifjes (voor de test):
code:
1
2
     if (zetletter + IntToStr(zetcijfer)) = 'a6' THEN
          a6.checked := true;

maar dat wil ik dus met een objectlist oid ;)

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Maarehm...... MOET dat met checkboxen? Anders moet ik namelijk zeggen dat ik dat een erg enge oplossing vind. :X

Wellicht kun je eens kijken naar de mogelijkheden die je hebt om echt te tekenen op het formulier?

My personal website


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 11 September 2003 @ 17:05:
speciaal voor OZ... ik moet voor school een kleine game maken, een zeeslagje met een matrix van 10x10 en die boten tekent hij automatisch in als de gebruiker ingeeft of de boot horizontaal moet liggen of verticaal en vervolgens geef je het meest linkse of bovenste punt en dan vult hij hem met een for loop, dat werkt al, maar nu heb ik dat dus met 100 ifjes (voor de test):
code:
1
2
     if (zetletter + IntToStr(zetcijfer)) = 'a6' THEN
          a6.checked := true;

maar dat wil ik dus met een objectlist oid ;)
Prima dat je dat wilt. Pak een Delphi boek erbij en of zoals OZ-Gump al (eerder dan ik :P ) opmerkte de Got Search erbij. Er zijn hier genoeg voorbeelden te vinden van
1 - De Objectlist
2 - Dynamisch Objecten aanmaken.

* Creepy heeft trouwens ergens wat Delphi tutorials zien liggen die Boter, Kaas en Eieren in Delphi gaan maken. Probeer die eens te vinden, ik denk wel dat je er wat aan hebt.

[ Voor 11% gewijzigd door Creepy op 11-09-2003 18:26 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Er werd reeds eerder opgemerkt dat FindControl/FindComponent slechte oplossingen zijn, waarom?

Stukje code ter verduidelijking:
code:
1
2
3
4
5
6
7
8
procedure TForm1.SwitchCheckBox(const CheckBoxName: String)
var
  ctl: TControl;
begin
  ctl:=Self.FindControl(CheckBoxName);
  if (Assigned(ctl)) and (ctl is TCheckBox) then
    TCheckBox(ctl).Checked := not TCheckBox(ctl).Checked;
end;

Alle afgeleiden van TWinControl hebben al een control list, dus ook een TPanel/TForm, goed toevoegen van een control aan een TWinControl is dus afdoende; zelf extra dynamische arrays/TObjectLists bijhouden is alleen maar dubbel werk en geheugenverspilling.
Pagina: 1