Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eine Komponente auf einen "X" Form Ansprechen? (https://www.delphipraxis.net/64801-eine-komponente-auf-einen-x-form-ansprechen.html)

Karstadt 8. Mär 2006 11:36


Eine Komponente auf einen "X" Form Ansprechen?
 
Hallo.

Habe 20 Forms auf jeden diese Form befindet sich eine TMYTABLE komponente.

meine Forms haben folgende namen f_xx (x steht für name).

Nun will ich auf eine X Form die Komponente TMYTABLE (Tabelle) ansprechen.

Wie mache ich das?

Procedure(Formname:String);
begin
TForm(Formname).Tabelle.open;
end;


So funktioniert das nicht! :(

Hador 8. Mär 2006 11:42

Re: Einen Komponente auf einen "X" Form Ansprechen
 
- Ändere bitte mal den Titel (Das was da steht ergibt irgendwie keinen Sinn)
- Nutze bitte die Delphi-Tags

Bei dem was du vorhast könnte dir evtl. FindComponent helfen
Delphi-Quellcode:
(Application.FindComponent('Formular_73') as TXForm).TMyTable.machwas

JasonDX 8. Mär 2006 11:54

Re: Einen Komponente auf einen "X" Form Ansprechen
 
Zitat:

Zitat von Hador
Bei dem was du vorhast könnte dir evtl. FindComponent helfen
Delphi-Quellcode:
(Application.FindComponent('Formular_73') as TXForm).TMyTable.machwas

Na ja, das problem ist ja, dass TXForm unterschiedliche Klassen sind, und ein TForm1 auf TForm2 zu casten geht richtig schief, auch wenn beide ein Tabelle: TMyTable enthalten.

Es gäb 2 Möglichkeiten:
a) Eine ähnliche Variante wie die von Hador:
Delphi-Quellcode:
(f_XX.FindComponent('Tabelle') as TMyTable).Open
oder b) über ein Interface, was eine sauberere Lösung wäre.

greetz
Mike

Karstadt 8. Mär 2006 11:59

Re: Eine Komponente auf einen "X" Form Ansprechen?
 
Ich versuche es anders.


Ich habe 20 Formulare. Auf jeden Formular habe ich eine gleichnamige Tabelle (komponente) nun will ich alle Tabelle Refreshen.

Oder Irgendwas anderese mit diese Komponente machen. Was genau ist erstmal egal!

Drei Formulare von 20!

var
f_ap: Tf_ap;
var
f_ag: Tf_ag;
var
f_a: Tf_a;

(Application.FindComponent('Formular_73') as TXForm).TMyTable.machwas

das funktioniert nicht weil ich as TXForm nicht kenne.

PS: Titeltext, ist aus meine sicht richtig!

JasonDX 8. Mär 2006 12:07

Re: Eine Komponente auf einen "X" Form Ansprechen?
 
Zitat:

Zitat von Karstadt
(Application.FindComponent('Formular_73') as TXForm).TMyTable.machwas

das funktioniert nicht weil ich as TXForm nicht kenne.

Delphi-Quellcode:
(f_XX.FindComponent('Tabelle') as TMyTable).Open
Sollte dann Funktionieren. Es ist allerdings nicht die sauberste Lösung, deswegen würd ich eher den Weg über ein Interface wählen.

Ich habs mal mit nem Button gemacht, es sollte nicht zu schwer sein das anzupassen:
Delphi-Quellcode:
type
  IButtonInterface = interface(IInterface)
    function GetButton: TButton;
    property b: TButton read GetButton;
  end;

  TForm1 = class(TForm, IButtonInterface)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    function GetButton: TButton;
  public
    property b: TButton read GetButton;
  end;

var
  Form1: TForm1;

implementation

procedure JustATest;
begin
  ShowMessage(IButtonInterface(Form1).b.Caption);
end;

{ TForm1 }

function TForm1.GetButton: TButton;
begin
  result := Button1;
end;
Zitat:

Zitat von Karstadt
PS: Titeltext, ist aus meine sicht richtig!

Darüber ließe sich streiten... Über das verwenden von Delphi- und Quotetags nicht wirklich. Dat hier sollte als Bedienungsanleitung dafür reichen ;)

greetz
Mike

Karstadt 8. Mär 2006 12:09

Re: Eine Komponente auf einen "X" Form Ansprechen?
 
ich werde euch mein Geheimniss lüften.... :)

Das will ich nicht 20 mal eingeben!

Delphi-Quellcode:
  IF Formularname = 'f_ag' then
  begin
    with f_ag.Tabelle do
    begin
      Close;
      Sql := Sqlabfrage;
      open;
    end;
  end;
 
IF Formularname = 'f_ap' then
  begin
    with f_ap.Tabelle do
    begin
      Close;
      Sql := Sqlabfrage;
      open;
    end;
  end;
 
IF Formularname = 'f_a' then
  begin
    with f_a.Tabelle do
    begin
      Close;
      Sql := Sqlabfrage;
      open;
    end;
  end;
sonder nur einmal!

Hador 8. Mär 2006 12:14

Re: Einen Komponente auf einen "X" Form Ansprechen
 
Zitat:

Zitat von JasonDX
Na ja, das problem ist ja, dass TXForm unterschiedliche Klassen sind

Ich hätte erwartet, das 20 Formulare mit jeweils einer Tabelle drauf die selbe Klasse sind, bzw. zumindest von der selben basisklasse abgeleitet sind.


Zitat:

Zitat von Karstadt
PS: Titeltext, ist aus meine sicht richtig!

Nach deiner Änderung ja


EDIT:

Von welchem Typ sind f_ag, f_ap, ... denn?

JasonDX 8. Mär 2006 12:19

Re: Eine Komponente auf einen "X" Form Ansprechen?
 
Zitat:

Zitat von Karstadt
ich werde euch mein Geheimniss lüften.... :)

Das will ich nicht 20 mal eingeben!

[...]

sonder nur einmal!

Dann verwende einfach einen der Lösungsvorschläge, die ich gepostet habe. Wenn du Fragen dazu hast, kannst du sie gerne stellen.

greetz
Mike

Karstadt 8. Mär 2006 12:21

Re: Eine Komponente auf einen "X" Form Ansprechen?
 
Zitat:

Ich hätte erwartet, das 20 Formulare mit jeweils einer Tabelle drauf die selbe Klasse sind, bzw. zumindest von der selben basisklasse abgeleitet sind.
Ich habe das nicht verstanden. Sorry.

Auf jeder Form ist eine Gleichenamierge Komponente (Tabelle <-Komponentename) von Gleichen Typ TMyTable

Deine Lösung ist "fast richtig"

(Application.FindComponent(Formularname) as Tf_ag).Tabelle.open;

So würde das auch funktionieren, nun muss ich noch irgendwie as TF_ag durch eine Varialbe erseten, aber Wie?

(Application.FindComponent(Formularname) as TForm(Formular.ClassType)).Tabelle.open;


Ihr merkt schon, ich habe nicht so viel Ahnung in diese Situation....

JasonDX 8. Mär 2006 12:24

Re: Eine Komponente auf einen "X" Form Ansprechen?
 
Zitat:

Zitat von Karstadt
Deine Lösung ist "fast richtig"
(Application.FindComponent(Formularname) as Tf_ag).Tabelle.open;
So würde das auch funktionieren, nun muss ich noch irgendwie as TF_ag durch eine Varialbe erseten, aber Wie?
(Application.FindComponent(Formularname) as TForm(Formular.ClassType)).Tabelle.open;

Ihr merkt schon, ich habe nicht so viel Ahnung in diese Situation....

Beiträge anderer Benutzer zu lesen sollte aber schon zu den Kompetenzen eines DP-Benutzers gezählt werden:
Zitat:

Zitat von JasonDX
Delphi-Quellcode:
(f_XX.FindComponent('Tabelle') as TMyTable).Open

:zwinker:

greetz
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Seite 1 von 2  1 2      

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