AGB  ·  Datenschutz  ·  Impressum  







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

FindComponent formübergreifend verwenden

Ein Thema von little_budda · begonnen am 17. Nov 2007 · letzter Beitrag vom 17. Nov 2007
Antwort Antwort
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#1

FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 17:55
Hallo,

ich verwende "FindComponent" um mehrere gleichartig benannte Komponenten der aktiven Form anzusprechen.
Klappt gut.

Kann ich auf diese Art und Weise auch Komponenten ansprechen die nicht auf meiner eigenen Form liegen?

Hab es probiert mit ...
Delphi-Quellcode:
  // Hier meckert schon der Compiler weil Form.TMemo nicht zugelassen ist
  frm_create_result_doc.TMemo(FindComponent('Memo_daten_1')).Lines.add('Hallo Welt');

  // Hier bringt mir die IDE eine Exeption mit Zugriffsverletzung
  TMemo(FindComponent('frm_create_result_doc.Memo_daten_1')).Lines.add('Hallo Welt');
Hat jemand eine Iddee für mich?

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 17:56
Der Cast TMemo() muss um den Aufruf von FIndComponent herum plaziert werden.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:02
Man sollte sich einmal ansehen, in welcher klasse FindComponent deklariert ist

Es ist übrigens in 75% der fälle absoluter schwachsinn, findcomponent zu benutzen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#4

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:12
@Apollonius
Ich dachte das hätte ich in meinem zweiten Versuch getan.
Habe ich nicht?

@DGL-luke
Danke für die Einschätzung.
Sehr konstruktiv.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:14
Sag mir doch mal, was genau du vorhast.

Wenn du anscheinend Name der Form und Name der Kompoennte literal weißt - wofür brauchst du FindComponent?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:15
Hi,

über
Delphi-Quellcode:
var
  i: integer;
begin
  for i:= 0 to application.ComponentCount- 1 do
    if application.Components[i] is TCustomForm then
      TCustomForm(application.Components[i]).FindComponent('...'))
kannst du die Formulare deiner Anwendung ansprechen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#7

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:21
@DGL-luke
Ich habe eine weitere Form mit 17 Memofeldern (je drei Zeilen / "Memo_daten_1" bis "Memo_daten_17")
Sicher kenne ich die Bezeichner der Memos aber ich arbeite den Inhalt innerhalb einer Schleife ab
und wollte die Variante über Case vermeiden

@bitsetter
Danke für den Code.
Ich werde es mal versuchen.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:23
Ich meinte mit meinem Post Folgendes:
TMemo(frm_create_result_doc.FindComponent('Memo_daten_1')).Lines.add('Hallo Welt'); Denn frm_create_result_doc.FindComponent gibt ja ein TComponent zurück, das du eben casten musst.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 18:28
Hallo,

warum spendierst du deinem Formular keine Methode, mit der Text in ein Memo eingefügt werden kann?

Delphi-Quellcode:
type
  TResultForm = class (TForm) // oder wie auch immer die Klasse heißt...
    [...]
  public
    procedure AddDataLine (const s: string);
  end;

procedure TResultForm.AddDataLine (const s: string);
begin
  Memo_daten_1.Lines.Add(s);
end;

// Aufruf:
frm_create_result_doc.AddDataLine ('Hallo Welt');
Falls du später das Memo durch eine andere Komponente ersetzen solltest, sind nur Änderungen in der Formular-Unit notwendig, nicht aber bei den verwendenden Units.

Wenn du zwischen mehreren Memos unterscheiden möchtest, kannst du das ja über einen weiteren Parameter steuern (Memo-Nummer o.ä.). Die dann erforderliche Fallunterscheidung wird da implementiert, wo sie hingehört - in der Unit, die auch die Memos enthält. Un um Lukas' Vorschlag noch aufzugreifen: wenn du Verweise auf die Memos einmalig im OnCreate des Formulars in einem Array ablegst, dann benötigst du nicht einmal eine Fallunterscheidung.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#10

Re: FindComponent formübergreifend verwenden

  Alt 17. Nov 2007, 20:02
Der Vorschlag mit der procedure im public Bereich ist so simpel und doch löst sie alle meine Probleme.
Danke.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  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 07:17 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