![]() |
Checkbox aktivieren bei bestimmten buchstaben in TEdit
moin.
ich habe eine reihe verschiedener checkboxen und ein TEdit. bei eingabe des buchstaben "A" soll eine bestimmte box gecheckt werden, schreibe ich zum beispiel "AB" soll die checkbox für "B" ebenfalls gecheckt werden..etc. Habt ihr einen tipp wie ich das realisieren kann? vielen dank für die mühe & lieben gruß aus Hamburg Robin |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Lasse doch den Buchstaben mit POS('A',s) finden. Wenn der Wert > 0 ist, dann hast du den Buchstaben gefunden. Wenn du das noch geschickt in eine Schleife packst, kannst du das ganze Alphabet durchsuchen.
|
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Zitat:
![]() ![]() ![]() ![]() ![]() ![]() ![]() Damit solltest du nun eigentlich was anfangen können ... |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
vielen dank Männer!
habs jetzt so gelöst
Delphi-Quellcode:
@Perlsau
procedure TForm1.Edit2Change(Sender: TObject);
var position: integer; S: string; begin s := edit2.Text; Position := Pos('A', s); if Position > 0 then checkbox1.Checked:=true else checkbox1.Checked:=false; end; ich habe onKeyPress und OnKeyDown auch probiert.
Delphi-Quellcode:
kam hier nicht ganz zum gleichen ergebnis aber die unterschiede von onKeyPress und OnKeyDown waren mir nicht bekannt, danke dafür.
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin if Key = Chr($41) then checkbox1.Checked:=true else checkbox1.Checked:=false; end; robin |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Oder einfach ganz kurz
Delphi-Quellcode:
procedure TForm1.Edit2Change(Sender: TObject);
begin checkbox1.Checked := Pos('A', Edit2.Text) > 0; end; |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
falls Du mehrere Checkboxen (wenn ich Deinen ersten Thread richtig gelesen hab ..) setzen willst.. würd ich das so machen.
Allerdings dürfte das aus Geschwindigkeitsgründen dann nur noch nach Abschluß des Tippens funktionieren. Per Button - ausführbar (Button.click;) z.B. wenn RETURN gedrückt wurde.
Delphi-Quellcode:
procedure TForm1.Button1click(Sender: TObject); //Edit2Change erstmal nicht
var s, ch : String: i, j : integer; begin s := Edit1.text; Lenst := length(s) - 1; // ausnahmsweise schon mal 1 abgezogen for j := 1 to 26 do begin // erstmal alle clearen Checkbox1.checked := false; Checkbox2.checked := false; Checkbox3.checked := false; .... Checkbox26.checked := false; end; for i := 1 to LenSt(s) do begin // 1 ist bereits abgezogen!!, s.o. ch := lowerchar(s[i]); case ch of 'a': Checkbox1.checked := true; 'b': Checkbox1.checked := true; 'c': Checkbox1.checked := true; // ... 'y': Checkbox1.checked := true; 'z': Checkbox1.checked := true; end; end; end; |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Warum eine Schleife, wenn Du dann jede einzeln setzt?
Immerhin sind diese nach 26 Schleifendurchläufen dann auf jedenfall nicht mehr gescheckt. ;) Ich würde diese in einem Array verwalten und dann mit Schleife über den Index ansprechen.
Delphi-Quellcode:
for i := 0 to 25 do
checkbox[i].Checked := Pos( chr(i+65), Uppercase(Edit2.Text)) > 0; |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Zitat:
schönen abend |
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Zitat:
|
AW: Checkbox aktivieren bei bestimmten buchstaben in TEdit
Wenn du so richtig frei und losgelöst von allem programmieren möchtest, dann definierst du dir einfach ein Interface
Delphi-Quellcode:
und die Form hat dann
type
IStringConsumer = interface [ '{349D7AB4-F90B-416B-B31E-3E41AD5E5195}' ] procedure Consume( const AString: string ); end;
Delphi-Quellcode:
Jetzt kannst du ganz simpel irgendeinen StringConsumer dort unterjubeln, z.B. einen
type
TForm1 = class( TForm ) Edit1 : TEdit; procedure Edit1Change( Sender: TObject ); private FStringConsumer : IStringConsumer; end; procedure TForm1.Edit1Change( Sender: TObject ); begin if Assigned( FStringConsumer ) then FStringConsumer.Consume( Edit1.Text ); end;
Delphi-Quellcode:
und irgendwo in einer Form-Methode erzeugst du eine Instanz
type
TCheckBoxContainsStringConsumer = class( TInterfacedObject, IStringConsumer ) private FCheckBox : TCheckBox; FContainsString: string; public constructor Create( ACheckBox: TCheckBox; const AContainsString: string ); procedure Consume( const AString: string ); end; { TCheckBoxContainsStringConsumer } procedure TCheckBoxContainsStringConsumer.Consume( const AString: string ); begin FCheckBox.Checked := Pos( FContainsString, AString ) > 0; end; constructor TCheckBoxContainsStringConsumer.Create( ACheckBox : TCheckBox; const AContainsString: string ); begin inherited Create; FCheckBox := ACheckBox; FContainsString := AContainsString; end;
Delphi-Quellcode:
und schon wird die Checkbox gesetzt ...
procedure TForm1.AfterConstruction;
begin inherited; FStringConsumer := TCheckBoxContainsStringConsumer.Create( CheckBox1, 'A' ); end; Möchtest du mehrere Consumer (z.B. CheckBoxen) ansteuern, dann erstellt man sich ganz einfach ein Aggregat:
Delphi-Quellcode:
und in der Form dann ganz einfach
TStringConsumerArray = array of IStringConsumer;
TAggregateStringConsumer = class( TInterfacedObject, IStringConsumer ) private FConsumers: TInterfaceList; public constructor Create( AConsumers: TStringConsumerArray ); destructor Destroy; override; procedure Consume( const AString: string ); end; { TAggregateStringConsumer } procedure TAggregateStringConsumer.Consume( const AString: string ); var LIdx: Integer; begin for LIdx := 0 to FConsumers.Count - 1 do begin IStringConsumer( FConsumers[ LIdx ] ).Consume( AString ); end; end; constructor TAggregateStringConsumer.Create( AConsumers: TStringConsumerArray ); var LIdx: Integer; begin inherited Create; FConsumers := TInterfaceList.Create; for LIdx := low( AConsumers ) to high( AConsumers ) do FConsumers.Add( AConsumers[ LIdx ] ); end; destructor TAggregateStringConsumer.Destroy; begin FConsumers.Free; inherited; end;
Delphi-Quellcode:
Die
procedure TForm1.AfterConstruction;
begin inherited; FStringConsumer := TAggregateStringConsumer.Create( [ TCheckBoxContainsStringConsumer.Create( CheckBox1, 'A' ), TCheckBoxContainsStringConsumer.Create( CheckBox2, 'B' ), TCheckBoxContainsStringConsumer.Create( CheckBox3, 'C' ), TCheckBoxContainsStringConsumer.Create( CheckBox4, 'D' ), TCheckBoxContainsStringConsumer.Create( CheckBox5, 'E' ), TCheckBoxContainsStringConsumer.Create( CheckBox6, 'F' ), TCheckBoxContainsStringConsumer.Create( CheckBox7, 'G' ), TCheckBoxContainsStringConsumer.Create( CheckBox8, 'H' ), // oder auf mehr Zeichen reagieren TCheckBoxContainsStringConsumer.Create( CheckBox9, 'Hallo' ) ] ); end;
Delphi-Quellcode:
Methode bleibt dabei immer gleich ;)
TForm1.Edit1Change
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz