AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eine Komponente auf einen "X" Form Ansprechen?
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Komponente auf einen "X" Form Ansprechen?

Ein Thema von Karstadt · begonnen am 8. Mär 2006 · letzter Beitrag vom 8. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#1

Eine Komponente auf einen "X" Form Ansprechen?

  Alt 8. Mär 2006, 11:36
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!
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Einen Komponente auf einen "X" Form Ansprechen

  Alt 8. Mär 2006, 11:42
- Ä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
(Application.FindComponent('Formular_73') as TXForm).TMyTable.machwas
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: Einen Komponente auf einen "X" Form Ansprechen

  Alt 8. Mär 2006, 11:54
Zitat von Hador:
Bei dem was du vorhast könnte dir evtl. FindComponent helfen
(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:
(f_XX.FindComponent('Tabelle') as TMyTable).Open oder b) über ein Interface, was eine sauberere Lösung wäre.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#4

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

  Alt 8. Mär 2006, 11:59
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!
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

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

  Alt 8. Mär 2006, 12:07
Zitat von Karstadt:
(Application.FindComponent('Formular_73') as TXForm).TMyTable.machwas

das funktioniert nicht weil ich as TXForm nicht kenne.
(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 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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#6

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

  Alt 8. Mär 2006, 12:09
ich werde euch mein Geheimniss lüften....

Das will ich nicht 20 mal eingeben!

Delphi-Quellcode:
  IF Formularname = 'f_agthen
  begin
    with f_ag.Tabelle do
    begin
      Close;
      Sql := Sqlabfrage;
      open;
    end;
  end;
  
IF Formularname = 'f_apthen
  begin
    with f_ap.Tabelle do
    begin
      Close;
      Sql := Sqlabfrage;
      open;
    end;
  end;
  
IF Formularname = 'f_athen
  begin
    with f_a.Tabelle do
    begin
      Close;
      Sql := Sqlabfrage;
      open;
    end;
  end;
sonder nur einmal!
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Einen Komponente auf einen "X" Form Ansprechen

  Alt 8. Mär 2006, 12:14
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 von Karstadt:
PS: Titeltext, ist aus meine sicht richtig!
Nach deiner Änderung ja


EDIT:

Von welchem Typ sind f_ag, f_ap, ... denn?
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#8

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

  Alt 8. Mär 2006, 12:19
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Karstadt

Registriert seit: 8. Nov 2005
788 Beiträge
 
#9

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

  Alt 8. Mär 2006, 12:21
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....
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#10

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

  Alt 8. Mär 2006, 12:24
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 von JasonDX:
(f_XX.FindComponent('Tabelle') as TMyTable).Open


greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:31 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