Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Combox, Checkbox, usw. selektiert ???? (https://www.delphipraxis.net/92147-combox-checkbox-usw-selektiert.html)

vanilla 15. Mai 2007 10:23


Combox, Checkbox, usw. selektiert ????
 
hallo leute,

ich habe eine funktion geschrieben der alle komponenten im form durchläuft und überprüft ob daten verändert worden sind oder nicht. allerdings durchläuft er nur die komponenten die zur klasse tcustomedit gehören also komponenten wie edit, memo werden durchlaufen, da gibt es die methode modified mit der ich immer abfragen konnte und es hat ganz gut geklappt soweit.

Delphi-Quellcode:

procedure TForm1.fileModified (EdtCmp : TCustomEdit);

begin

    if (EdtCmp As TCustomEdit).Modified then
    begin
    // mach irgendwas      
    end;

end;
ich habe jetzt aber noch paar andere komponenten wie combobox und checkbox und soweiter und muss die funktion abstrahieren, zur welcher oberklasse gehören diese komponenten und wie kann ich überprüfen ob etwas selektiert wird oder nicht, gibt es da sowas ähnliches wie modified ??? ich habe schon bei Delphi-Hilfe gesucht, aber ich find nichts. :(

ich hoffe ihr könnt wir weiterhelfen...

Luckie 15. Mai 2007 10:40

Re: Combox, Checkbox, usw. selektiert ????
 
Ninn TComponent oder TWinControl.

vanilla 15. Mai 2007 11:50

Re: Combox, Checkbox, usw. selektiert ????
 
mit diesen beiden klassen hatte ich es schon versucht aber weiss nicht mit welcher methode ich überprüfen kann ob was selektiert wurde oder nicht. bei tcustomedit ging das schön mit modified....

Aike 15. Mai 2007 12:56

Re: Combox, Checkbox, usw. selektiert ????
 
Du kannst auch, wenn du die Komponenten entsprechend benannt hast, erstmal schauen, wie die Komponente heißt und dann auf den Komp.typ schließen.

Delphi-Quellcode:
function SiS(s,SubStr:string):boolean; //StringInString prüft, ob ein String in einem längeren vorkommt
begin
  result:=false;
  if Pos(SubStr,s)>0 then
    result:=true;
end;

function TypBestimmen(AComp:TComponent):string;
var s:string;
begin
  s:=AComp.Name;
  if SiS('edit',s) then result:='Editfeld'
  else if SiS('Checkbox',s) then result:='Checkbox'
  else if ...
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Showmessage(TypBestimmen(Editfeld{ as TComponent}));
end;
Was ich aber machen würde, ist, dass du eine globale Variable namens "geaendert" nimmst und sie auf true setzt, wenn der Anwender etwas irgendwo rein schreibt.

Apollonius 15. Mai 2007 13:34

Re: Combox, Checkbox, usw. selektiert ????
 
Typbestimmen braucht man nicht. Wozu gibt es denn Classname.
Ich würde bei den Komponenten mit "Tag" arbeiten. Also im onChange-Ereignis denn Tag auf 1 setzen und dann einfach überprüfen.
Hoffe geholfen zu haben
Apollonius

vanilla 15. Mai 2007 14:29

Re: Combox, Checkbox, usw. selektiert ????
 
hi,

ich möchte nicht bei jedem einzelnen komponenten das onchange ereignis aufrufen. sondern durch EINE funktion alle durchlaufen und abfragen.

Delphi-Quellcode:
for i := 0 to Form1.ComponentCount-1  do
  begin

    if ( self.components[i] Is TCustomEdit) then
      fileModified(Form1.components[i] As TCustomEdit);

  end;
so hatte ichs bis jetzt. Ich kann die Funktion nicht so umbauen, dass sie auch auf irgendwelchen selektionen von checkboxen, combobox usw. reagiert. da find ich keine passende methode. ich bräuchte sowas wie 'selected' (anstatt modified). :?

leddl 15. Mai 2007 14:42

Re: Combox, Checkbox, usw. selektiert ????
 
Zitat:

Zitat von vanilla
ich bräuchte sowas wie 'selected' (anstatt modified). :?

Naja, dann bastels dir doch ;) Leite eine Klasse von TCheckbox ab und füge die Property wie gewünscht ein. Dann musst du nur noch auf das erstmalige Ändern reagieren und deine Property entsprechend setzen und kannst sie dann in deinem Programm abfragen :zwinker:

Apollonius 15. Mai 2007 14:46

Re: Combox, Checkbox, usw. selektiert ????
 
Ich hatte nicht vor, onChange ständig irgendwie aufzurufen. :wiejetzt:
Du weist allen Komponenten das selbe onChange zu. Dort wird der Tag der Komponenten verändert. In deiner Prüfprozedur schaust du dann nur nach, ob der Tag eben den entsprechenden Wert hat und setzt ihn gegebenenfalls wieder zurück.

vanilla 15. Mai 2007 14:57

Re: Combox, Checkbox, usw. selektiert ????
 
ich danke euch erstmal für eure lösungsvorschläge, werde sie dann mal ausprobieren. :coder:

Lannes 16. Mai 2007 11:52

Re: Combox, Checkbox, usw. selektiert ????
 
Hallo,
Zitat:

Zitat von vanilla
... ich bräuchte sowas wie 'selected' (anstatt modified). :?

dann sollte das passen: Screen.OnActiveControlChange

Den Tipp entsprechend modifizieren, also farblich hervorheben > merken:
dsdt: Komponente beim Fokussieren farblich hervorheben


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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-2025 by Thomas Breitkreuz