Entwickler-Ecke
LCL-Komponenten - Lazarus - TCheckBox
Markus696 - Mi 12.03.14 09:28
Titel: Lazarus - TCheckBox
Hallo,
ich hätte eine grundlegende Frage zu der Lazarus-Komponente TCheckBox. Ich habe die Change-Ereignisse dreier Boxen folgendermaßen festgelegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TMulticaesar.cb_ownstringChange( Sender: TObject ); begin
cb_randomstring.checked := false ; cb_setstring.checked := false ;
e_setkey.enabled := true ;
e_setlengthkey.text := 'Länge hier eingeben!' ; e_setlengthkey.enabled := false ;
end;
procedure TMulticaesar.cb_setstringChange( Sender: TObject ); begin
cb_ownstring.checked := false ; cb_randomstring.checked := false ;
e_setlengthkey.enabled := true ;
e_setkey.text := 'Schlüssel hier eingeben!' ; e_setkey.enabled := false ;
end;
procedure TMulticaesar.cb_randomstringChange( Sender: TObject ); begin
cb_ownstring.checked := false ; cb_setstring.checked := false ;
e_setkey.text := 'Schlüssel hier eingeben!' ; e_setkey.enabled := false ;
e_setlengthkey.text := 'Länge hier eingeben!' ; e_setlengthkey.enabled := false ;
end; |
Ich möchte einfach erreichen, dass die anderen beiden Checkboxes gecleart werden, wenn eine andere selektiert wird, da nur eine gleichzeitig aktiv sein darf. Bloß leider passiert Folgendes: Wenn ich zuerst eine Checkbox abhake, und danach eine andere wähle, dann wird erstere zwar gecleart, aber die zweite Box wird nur bei nochmaligem Klicken abgehakt, bleibt also anfangs noch leer. Ich habe probiert einfach noch das "Checked"-Attribut in der Prozedur zu ändern (siehe Kommentar am Prozeduranfang), aber das führt zu einer Fehlermeldung. Wäre super, wenn mir jemand mit entsprechender Komponentenkenntnis helfen könnte.
Moderiert von Martok: Code- durch Delphi-Tags ersetztModeriert von Christian S.: Topic aus Sonstiges (Delphi) verschoben am Mi 26.03.2014 um 09:11
WasWeißDennIch - Mi 12.03.14 09:46
In meinen Augen machst Du es Dir unnötig kompliziert. Nimm doch statt 3 Checkboxen einfach eine RadioGroup, da kann nur maximal 1 Eintrag gleichzeitig aktiv sein.
icho2099 - Do 13.03.14 08:23
Es soll wohl auch möglich sein, dass keine der 3 Checkboxen angehakt ist?
Da würde ich im Change auf checked reagieren, und nicht generell.
zuma - Do 13.03.14 11:57
also, ich würde deine 3 Methoden in einer zusammenfassen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| function CheckboxenEinstellen(xCheckBoxNr : integer; xChecked : boolean); begin try cb_randomstring.onchange := Nil; cb_ownstring.onchange := Nil; cb_setstring.onchange := Nil; cb_randomstring.checked := False; cb_ownstring.checked := False; cb_setstring.checked := False; case xCheckBoxNr of 1: begin cb_ randomString.Checked := xChecked; end; 2: begin cb_OwnString.Checked := xChecked; end; 3: begin cb_SetString.Checked := xChecked; end; else Showmessage('Ungültige CheckboxNr übergeben'); end; finally cb_randomstring.OnChange := cb_RandomsttringOnChange; cb_ownstring.OnChange := cb_ownstringOnChange; cb_setstring.OnChange := cb_setstringOnChange; end; end; |
in jedes Onchange dann einfach nur dir procedure mit den entsprechenden Parametern aufrufen
Bsp.:
Delphi-Quelltext
1:
| CheckboxenEinstellen(1, cb_randomString.Checked); |
durch das abhängen des OnChangeereignisses kannst du an den Checkboxen fummeln,
ohne dabei die jeweils anderen auszulösen (Checked := irgendwas löst wieder onchange aus).
Weiterer Vortei: Dein Code wird übersichtlicher/einfacher, weil die Checkboxauswertung nur an einer
und nicht 3 stellen passiert.
Ich hoffe, mein Ansatz hilft dir weiter
Zuma
Markus696 - Di 18.03.14 16:17
Danke, das wäre dann vom Tisch. :) Bei mir ist leider noch ein weiteres Problem aufgetaucht:
Delphi-Quelltext
1: 2: 3: 4: 5:
| try length := StrtoInt( e_setlengthkey.text ) ; except ShowMessage( 'ERROR. Falsche Parameter aufgerufen. Bitte eine Zahl eingeben!' ); end; |
Immer wenn ich das Programm mit beispielsweise einem String in e_setlengthkey laufen lasse kommt trotzdem eine Fehlermeldung in der Zeiler mit der length-Zuweisung. Kann mir jemand sagen, was ich hier falsch geschrieben habe?
Moderiert von Martok: Code- durch Delphi-Tags ersetzt
WasWeißDennIch - Di 18.03.14 16:37
Kommt die Meldung nur innerhalb der IDE oder auch dann, wenn Du es außerhalb von Delphi/Lazarus laufen lässt? Im ersten Fall wäre das völlig normal.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!