![]() |
auf komponenten eines zweiten formulars zugreifen
ich habe 2 formblätter und will auf eniem image auf Form1 etwas zeichnen (durch klick eines buttons der sich auf Form2 befindet).
zunächst erstelle ich Form1 mit
Delphi-Quellcode:
wenn ich das programm starte sind auch beide fenster sichtbar. wenn ich aber nun eine prozedur aufrufe, die auf Form1.Image1 zeichnen soll, geschieht nichts.
Form1 := TForm1.Create(Form2);
Form1.Show; in der projektdatei sind beide units eingebunden. (die standard form, die von anfang an da ist, ist übrigens Form2, danach wurde erst Form1 erstellt). was muss ich noch machen um auf komponenten anderer formulare zugreifen zu können? |
Re: auf komponenten eines zweiten formulars zugreifen
In der Unit von Form2 muss die von Form1 eingebunden sein, dann kannst Du mit Form1.Image1 auf das Image zugreifen.
|
Re: auf komponenten eines zweiten formulars zugreifen
hab ich schon, es geschieht einfach nichts wenn ich den button drücke :wall:
|
Re: auf komponenten eines zweiten formulars zugreifen
z.B.
Delphi-Quellcode:
Wenn die Unit in Unit1 eingebunden ist, kannst Du mit dem Namen der Form auf die Unit zugreifen.
Form2.Button2.Click;
|
Re: auf komponenten eines zweiten formulars zugreifen
Dann musst Du in der 2. Zeile etwas ändern :roll:
|
Re: auf komponenten eines zweiten formulars zugreifen
die unit ist eingebunden, es gibt auch keine fehlermeldung. die anweisung Form1.Image1... ergibt auch keinen fehler. wenn ich das programm gestartet habe, tut sich jedoch nichts bei dem Image auf form1, wenn ich auf den button auf form2 klicke. muss möglicherweise erst die form1 "freigegeben" werden, sodass man von anderen formularen aus "zugreifen" kann?
|
Re: auf komponenten eines zweiten formulars zugreifen
nein, durch das einbinden sollte alles geregelt sein.
was soll denn passieren, wenn du auf den button klickst? |
Re: auf komponenten eines zweiten formulars zugreifen
Zitat:
|
Re: auf komponenten eines zweiten formulars zugreifen
wenn ich auf den button klicke soll auf einem image der anderen form text ausgegeben werden.
meine .dpr sieht so aus:
Delphi-Quellcode:
und das ist der teil meiner Unit1:
program test;
uses Forms, Unit1 in 'Unit1.pas' {Form2}, Unit2 in 'Unit2.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm1, Form1); Application.Run; end. Zitat:
|
Re: auf komponenten eines zweiten formulars zugreifen
Ein Image ist eigentlich nicht dazu gedacht, dass man darauf herumzeichnet. Nimm stattdessen einmal eine PaintBox und zeichne in deren OnPaint-Ereignis, dann sollte das auch klappen.
|
Re: auf komponenten eines zweiten formulars zugreifen
gezeichnet soll später auch noch werden. wenn jedoch TextOut kein ergebnis bringt, werden es andere funktionen auch nicht tun.
kann mir evtl jemand eine anleitung geben, wie genau man vorgehen muss um eine zweite form richtig einzubinden und auf diese zugreifen zu können? edit : mit einer paintbox funzt es auch nicht |
Re: auf komponenten eines zweiten formulars zugreifen
Zitat:
|
Re: auf komponenten eines zweiten formulars zugreifen
Nimm den Code erst mal aus dem OnKlick-Ereignis der Schaltfläche raus und mach aus ihm eine öffentliche Methode des zweiten Formulares. Diese kannst du dann auch aus dem ersten Formular raus aufrufen. Dann hast du im ersten Formular auch einen aussagekräftigen Methodenaufruf.
Was den Rest angeht, warum es nicht funktioniert, kann man ohne Code nicht sagen. Woher sollen wir wissen, wie dein Code aussieht und was du falsch machst? |
Re: auf komponenten eines zweiten formulars zugreifen
Liste der Anhänge anzeigen (Anzahl: 1)
Man könnte es auch über eine Property lösen (siehe Anhang).
|
Re: auf komponenten eines zweiten formulars zugreifen
Es wäre ein grosser Fehler, wenn Form2 selbst "persönlich" auf Form1 etwas zeichnet:
Delphi-Quellcode:
Jedes Formular hat seinen eigenen Verantwortungsbereich und dazu gehört, dass niemand anderes auf dem Formular herumzumalen hat.
procedure TForm2.bla(...);
begin Form1.Image1.Canvas.TextOut(...xyz...); end; Aber Form2 kann das Zeichnen an Form1 delegieren:
Delphi-Quellcode:
Das hat folgende Vorteile:
procedure TForm2.bla(...);
begin Form1.ZeichneRechteckMitBeschriftung(...xyz...); end; 1.) Form1 kann jederzeit geändert werden (z.B. Umbenennung von Komponenten, Austausch von Image1 durch eine Paintbox oder wasauchimmer) 2.) verringerte Abhängigkeiten 3.) es wird expliziert gemacht, was der Code eigentlich tun soll 4.) verbesserte Testbarkeit. Man kann einfach einen Testbutton auf Form1 legen und die Methode ZeichneRechteckMitBeschriftung() aufrufen. Dann der Code so lange verbessern, bis alles wie gewünscht funktioniert. Danach dürfte es keine Probleme mehr geben, wenn diese Methode von einem anderen Formular aufgerufen wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz