AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf beliebiges Element eines Forms

Ein Thema von Xong · begonnen am 20. Nov 2008 · letzter Beitrag vom 20. Nov 2008
Antwort Antwort
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#1

Zugriff auf beliebiges Element eines Forms

  Alt 20. Nov 2008, 15:09
Hi DPler!

Ich habe ein Formular. Auf diesem Formular sitzt irgendwo ein Dockpanel.
Auf diesem Dockpanel erzeuge ich zur Laufzeit eine Toolbar mit dem Namen "Toolbar1".
Diese Toolbar kann nun vom Nutzer in andere Dockpanel verschoben oder gänzlich gelöst werden (als eigenständiges kleines Fenster, wie man es auch von Word kennt).

Wie kann ich zur Laufzeit ermitteln, wo sich "Toolbar1" befindet?

Wie bekomme ich außerdem Zugriff auf "Toolbar1", wenn ich nur den Namen (Komponentenname) zur Verfügung habe?

LG,
Xong
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: Zugriff auf beliebiges Element eines Forms

  Alt 20. Nov 2008, 15:23
Hallo,

versuche es mal flach zu formulieren:

Gehe durch die Komponenten der Applikation und für jede gefundene Komponente durch alle Komponenten dieser Komponente, bis du fündig geworden bist.

Sowas in der Art:
Delphi-Quellcode:
for i := 0 to Application.ComponentCount - 1 do begin
  if Application.Components[i].ComponentCount > 0 then
    with Application.Components[i] do begin
      // das dann rekursiv weiter
    end;
  end;
end;
Bei Formularen ggfls. auch mit form.ControlCount und form.Controls[i], eventuell auch mit Application.Components[i].FindComponent('Toolbar1')...

Zugriff per Typcast auf die gefunden Komponente:If Components[i] is TToolbar then with Components[i] As TToolbar do begin...
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zugriff auf beliebiges Element eines Forms

  Alt 20. Nov 2008, 16:00
Herzlichen Dank für deine Antwort.
Ich vermutete, dass es schon eine fertige Funktion gibt.

Meine Lösung:
Delphi-Quellcode:
{
  Rekursive Suche nach einer Komponente anhand ihres Namens

  Parameter
    s:      Name der gesuchten Komponente
    parent: Startkomponente, bei der mit der Suche begonnen werden soll.

  Rückgabewert
    Gibt bei Erfolg die gesuchte Komponente zurück, bei Misserfolg nil.
}

function FindComponentByName(s: TComponentName; parent: TComponent): TComponent;
var i: Integer;
begin
  if parent.Name = s then begin
    // Gefunden!
    Result := parent;
  end else begin
    if parent.ComponentCount > 0 then begin
      for i:=0 to parent.ComponentCount - 1 do begin
        Result := FindComponentByName(s,parent.Components[i]);
        if Result <> nil then
          break;
      end;
    end else begin
      Result := nil;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Zugriff auf beliebiges Element eines Forms

  Alt 20. Nov 2008, 16:04
Wobei die Zeile
Zitat:
if parent.ComponentCount > 0 then begin
überflüssig ist
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Zugriff auf beliebiges Element eines Forms

  Alt 20. Nov 2008, 16:15
Lieber eine Zuviel als eine zu wenig
Markus Kinzler
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Zugriff auf beliebiges Element eines Forms

  Alt 20. Nov 2008, 16:46
Zitat von DeddyH:
Wobei die Zeile
Zitat:
if parent.ComponentCount > 0 then begin
überflüssig ist
Dann gäbe es aber denn Fall, das Result undefiniert ist.


mfg
DerDan
nichts ist so schön wie man es sich vorstellt
  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 14:45 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