![]() |
komponente suchen über alle Forms und Datenmodule
Hallo,
habe wiedermal ein Problem. :wall: Wie kann ich eine Bestimmte Komponente finden. Z.b. eine Komponente die in einem Datenmodul sitzt sucht eine and. Komponente die irgendwo in einem Formular sitzt aber die Formularnamen nicht namentlich bekannt sind. Habs so probiert funkt aber nicht:
Delphi-Quellcode:
for x:=0 to Application.ComponentCount-1 do
if application.Components[x] is TMaxMySqlGrid then //Prüfen welche v. meinen Grid sind begin if (application.Components[x] as TMaxMySqlGrid).Datasource.Name = Self.name then begin result:= application.Components[x]; //.Name exit; end else result:= nil; end; |
Re: komponente suchen über alle Forms und Datenmodule
Hi,
bin mir nicht sicher ob ich es richtig verstanden habe... aber so z.B. kannst du ein TEdit in allen Forms deiner App suchen:
Delphi-Quellcode:
Au'revoir,
function FindEdit(Name: String): TEdit;
var C, F: Integer; begin Result:=nil; for F:=0 to Application.ComponentCount-1 do begin if Application.Components[F] is TForm then for C:=0 to TForm(Form).ComponentCount-1 do begin if TForm(Form).Components[C] is TEdit then begin //Wenn das was du suchst ein TEdit ist.. if TEdit(TForm(Form).Components[C]).Name = Name then begin //Name..? Result:=TEdit(TForm(Form).Components[C]); Exit; end; end; end; end; end; end; Aya~ |
Re: komponente suchen über alle Forms und Datenmodule
Hallo Markus,
du darfst nicht in den Komponenten der Application direkt und schon gar nicht alleine dort suchen. Dort befinden sich hauptsächlich die Formulare. Bestimmte Design-Techniken machen es sogar nötig, dass du rekursiv suchen musst - z.B. embedded child forms, frames... Zur Veranschaulichung nimm einfach mal eines deiner Grids und gehe die chain of owners zurück bis zur Application.
Delphi-Quellcode:
Grüße vom marabu
var
c: TComponent; sl: TStringList; begin c := DBGrid; sl := TStringList.Create; repeat sl.Add(c.Name + ': ' + c.ClassName); c := c.Owner; until not Assigned(c); ShowMessage(sl.Text); sl.Free; end; |
Re: komponente suchen über alle Forms und Datenmodule
In der Code-Library gibt es Hilfsfunktionen dazu:
![]() |
Re: komponente suchen über alle Forms und Datenmodule
Delphi-Quellcode:
function GlobalFindComponent(const AName: String): TComponent;
function ComponentFind(AComponent: TComponent; AName: String): TComponent; var I: Integer; begin Result := AComponent.FindComponent(AName); if not Assigned(Result) then for I := 0 to AComponent.ComponentCount - 1 do begin Result := ComponentFind(AComponent.Components[I], AName); if Assigned(Result) then Break; end; end; begin Result := ComponentFind(Application, AName); end; |
Re: komponente suchen über alle Forms und Datenmodule
Thx to all
habs nun gelöst dank eurer Hilfe :dp: und so schauts aus:
Delphi-Quellcode:
function TMaxMySqlQuery.FsucheGridKomponente():TComponent;
var x,f : Integer; xform : Tform; begin for f:=0 to Application.ComponentCount-1 do //Anzahl der Komponenten feststellen if Application.Components[f] is TForm then //Alle Fenster durchgehen begin xform := Tform(Application.Components[f]); // in TForm casten for x:=0 to Tform(xform).ComponentCount-1 do //Komponenten des Forms duchlaufen if Tform(xform).Components[x] is TMaxMySqlGrid then //Prüfen welche v. meinen Grid sind begin //DatasourceName mit Namen dieser Komp. vergleichen if (Tform(xform).Components[x] as TMaxMySqlGrid).Datasource.Name = Self.name then begin result:= Tform(xform).Components[x]; exit; end else result:= nil; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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