![]() |
Komponenten auf einem Register löschen/überprüfen
Hallo zusammen,
ich habe eine Funktion, die Felder in meinem Programm löscht bzw. überprüft, ob sie leer sind (vor dem Speichern). Jetzt durchlaufe ich alle Felder und überprüfe, ob der Komponentennamen einen Teilstring enthält (Alle Komponenten(Name) auf dem Register Einstellungen enthalten zum Beispiel _Einstellung_). Ich möchte das aber etwas beschleunigen. Meine Idee: ich übergebe eine Komponente (zum Beispiel: TAdvOfficePager). Hier liegen jetzt Panel, Gridbox und so weiter drauf. Diese enthalten jetzt meine TEdit, Tcombobox usw. In der Funktion möchte ich jetzt TAdvOfficePager übergeben + TEdit und ob es gelöscht oder überprüft werden soll. Es sollen aber alle Felder auf dem TAdvOfficePager gefunden werden. Hat einer einen Tipp? Danke und bleibt gesund Maik
Delphi-Quellcode:
function Tf_menue.f_Felder_ueberpruefen(sRegister:string;boLöschen:boolean):Boolean;
begin Result:= false; //alle Felder durchlaufen und prüfen, ob das richtige Register erreicht ist for iPuffer := 0 to ComponentCount-1 do begin if boLöschen = true then begin if Components[iPuffer] is TAdvEdit then begin if pos(sRegister,(Components[iPuffer] as TAdvEdit).Name) > 0 then begin (Components[iPuffer] as TAdvEdit).Text := ''; (Components[iPuffer] as TAdvEdit).Color := clWindow; end; end; end else begin if Components[iPuffer] is TAdvEdit then begin if pos(sRegister,(Components[iPuffer] as TAdvEdit).Name) > 0 then begin if (Components[iPuffer] as TAdvEdit).Text = '' then begin (Components[iPuffer] as TAdvEdit).Color := $00AFB0EB; Result := true; end else (Components[iPuffer] as TAdvEdit).Color := clWindow; end; end; end; end; |
AW: Komponenten auf einem Register löschen/überprüfen
.Components ist was, wo die Unterkomponenten das als Owner haben.
.Controls ist das entsprechende für die Beziehung des Parent. Entweder beim manuellen Create den passenden Owner benutzen, oder nur die Unterkomponenten durchlaufen (z.B. in einem Panel/Groupbox usw.), anstatt Allem auf der Form. Zitat:
Eine Funktion "prüfen", die löscht? Mach dir das Leben einfacher und mach besser zwei Methoden daraus. (wird übersichtlicher und das fast ohne eine Zeile mehr Code) Und das POS: Wirklich "irgendwo" prüfen? Oder ist hier doch eher
Delphi-Quellcode:
gemeint?
Pos(...) = 1
Delphi-Quellcode:
if (Components[iPuffer] is TAdvEdit) and StartsStr(sRegister, Components[iPuffer]) then // oder StartsText
|
AW: Komponenten auf einem Register löschen/überprüfen
Hallo himitsu,
danke für den Tipp probiere ich später gleich mal aus. Das mit dem Pos > 0 war so gemeint, da der Name zum Beispiel: le_Einstellungen_Passwort heißen kann. Noch eine Frage zu if = true then. Meist du damit: if boLöschen = true then soll ich so schreiben: if boLöschen then? Danke für die Hilfe Maik |
AW: Komponenten auf einem Register löschen/überprüfen
Ich habe jetzt folgendes gefunden und auf meine Bedürfnisse angepasst.
Leider bekomme ich in Zeile 10 einen Fehler, sobald es sich um eine Komponente wie TAdvEdit handelt. Aufbau auf dem Form: 1. TAdvOfficePAge (Wird in der Funktion als wcKomponente übergeben) 2. --> TGridPanel 3. ------> TAdvGroupBox 4. ---------> TAdvConboBox (Hier tritt jetzt der Fehler auf, beim Durchlauf der Schleife.) 01. function Tf_menue.f_FindControls(wcKomponente: TWinControl; cKomponente: TClass; boRecurse: Boolean):boolean; 02. // wcKomponente = die Komponente in der Gesucht werden soll zum Beipsiel p_Einstellungen 03. // cKomponente = Komponente nach der gesucht werden soll 04. // boRecurse = soll auch in den unterkomponenten gesucht werden p_Einstellungen -> p_Panel -> groupbox 05. var 06. ccKomponente: TWinControl; 07. begin 08. for iPuffer := 0 to Pred(wcKomponente.ControlCount) do 09. begin 10. ccKomponente := wcKomponente.Controls[iPuffer] as TWinControl; 11. if ccKomponente is cKomponente then 12. begin 13. (ccKomponente.Controls[iPuffer] as TAdvEdit).Text := ''; 14. (ccKomponente.Controls[iPuffer] as TAdvEdit).Color := clWindow; 15. end; 16. if boRecurse and (ccKomponente.ControlCount > 0) then 17. f_FindControls(ccKomponente, cKomponente, boRecurse); 18. end; 19.end; Was kann ich machen, um diesen Fehler abzufangen und die Edits zu löschen. Danke Maik |
AW: Komponenten auf einem Register löschen/überprüfen
Übrigens solltest du nicht "Ich bekomme einen Fehler." schreiben, sondern "Ich bekomme folgenden Fehler: Ungültige Typumwandlung."
Und was der bedeutet, ist doch klar, oder? Man muss vorm Typumwandeln immer prüfen, ob man das darf (
Delphi-Quellcode:
).
is
|
AW: Komponenten auf einem Register löschen/überprüfen
Zitat:
Für diesen Fall müsste es eigentlich einen eigenen Smiley geben... |
AW: Komponenten auf einem Register löschen/überprüfen
Zitat:
Kannst auch Chinesich nutzen. (mit nur noch einem Zeichen pro Funktion, Variable, Typ usw. wird der Code ser viel kürzer und übersichtlicher) |
AW: Komponenten auf einem Register löschen/überprüfen
Zitat:
Gruß K-H |
AW: Komponenten auf einem Register löschen/überprüfen
Zitat:
|
AW: Komponenten auf einem Register löschen/überprüfen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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