AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Komponenten auf einem Register löschen/überprüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten auf einem Register löschen/überprüfen

Ein Thema von mdittrich · begonnen am 4. Apr 2020 · letzter Beitrag vom 6. Apr 2020
Antwort Antwort
mdittrich

Registriert seit: 7. Feb 2017
4 Beiträge
 
#1

Komponenten auf einem Register löschen/überprüfen

  Alt 4. Apr 2020, 13:09
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;

Geändert von Daniel ( 4. Apr 2020 um 13:12 Uhr) Grund: Code in Delphi-Tags gesetzt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 4. Apr 2020, 13:33
.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:
if ... = True then
Wen sollen wir dafür steinigen?

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 Pos(...) = 1 gemeint?
if (Components[iPuffer] is TAdvEdit) and StartsStr(sRegister, Components[iPuffer]) then // oder StartsText
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 4. Apr 2020 um 13:41 Uhr)
  Mit Zitat antworten Zitat
mdittrich

Registriert seit: 7. Feb 2017
4 Beiträge
 
#3

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 4. Apr 2020, 18:29
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
  Mit Zitat antworten Zitat
mdittrich

Registriert seit: 7. Feb 2017
4 Beiträge
 
#4

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 4. Apr 2020, 22:40
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
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 4. Apr 2020, 23:26
Ü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 (is ).
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 6. Apr 2020, 09:22


Für diesen Fall müsste es eigentlich einen eigenen Smiley geben...
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#7

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 6. Apr 2020, 11:18
Für diesen Fall müsste es eigentlich einen eigenen Smiley geben...
Seit 2009 ist das kein Problem.
Kannst auch Chinesich nutzen. (mit nur noch einem Zeichen pro Funktion, Variable, Typ usw. wird der Code ser viel kürzer und übersichtlicher)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 6. Apr 2020, 11:35
Noch eine Frage zu if = true then. Meist du damit:

if boLöschen = true then soll ich so schreiben: if boLöschen then?
Genau! und wenn Du noch einen Bogen um Umlaute machst, und nach Möglichkeit engl. Bezeichner verwendest, verstehen Dich gleich nicht nur deutschsprachige Programmierer.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#9

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 6. Apr 2020, 17:50
...Kannst auch Chinesich nutzen. (mit nur noch einem Zeichen pro Funktion, Variable, Typ usw. wird der Code ser viel kürzer und übersichtlicher)
Du machst mich fertig!
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Komponenten auf einem Register löschen/überprüfen

  Alt 6. Apr 2020, 17:56
Seit 2009 ist das kein Problem.
Kannst auch Chinesich nutzen. (mit nur noch einem Zeichen pro Funktion, Variable, Typ usw. wird der Code ser viel kürzer und übersichtlicher)
Jo, kann man natürlich. Heißt aber nicht, dass ich es so machen würde.
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz