AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi komponente suchen über alle Forms und Datenmodule
Thema durchsuchen
Ansicht
Themen-Optionen

komponente suchen über alle Forms und Datenmodule

Ein Thema von Schuster · begonnen am 11. Jul 2005 · letzter Beitrag vom 11. Jul 2005
Antwort Antwort
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#1

komponente suchen über alle Forms und Datenmodule

  Alt 11. Jul 2005, 13:53
Hallo,

habe wiedermal ein Problem.

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;
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
Benutzerbild von Aya
Aya

Registriert seit: 24. Jul 2003
Ort: Kassel
138 Beiträge
 
Delphi 6 Professional
 
#2

Re: komponente suchen über alle Forms und Datenmodule

  Alt 11. Jul 2005, 14:20
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:
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;
Au'revoir,
Aya~
I aim for my endless dreams and I know they will come true!
S: String = #86^)^3^)^4#58#32^(^4^4^0#58#47#47^7^7^7#46^+^/^3^(^)^'^!^9^!#46^$^%;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: komponente suchen über alle Forms und Datenmodule

  Alt 11. Jul 2005, 14:21
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:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: komponente suchen über alle Forms und Datenmodule

  Alt 11. Jul 2005, 14:43
In der Code-Library gibt es Hilfsfunktionen dazu:
http://www.delphipraxis.net/internal...ct.php?t=52210
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#5

Re: komponente suchen über alle Forms und Datenmodule

  Alt 11. Jul 2005, 14:56
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;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#6

Re: komponente suchen über alle Forms und Datenmodule

  Alt 11. Jul 2005, 15:27
Thx to all

habs nun gelöst dank eurer Hilfe

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;
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  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 19:23 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