![]() |
Labels nicht in Form1 deklarieren, aber dort anzeigen
Ich habe das Form1 mit der dazugehörigen Klasse in Unit1. In Form1 sollen später bestimmte Labels kurzzeitig angezeigt werden. Sie sollen im Quelltext erzeugt werden. Jetzt möcht ich die aber nicht in Form1 deklarieren sondern in einer anderen Klasse (irgendwo in Unit 2 z.b.). Geht das irgendwie, sodass sie dann beim Aufrufen der entsprechenden Klasse/Prozedur in Form1 zu sehen sind?
|
Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var NewLabel: TLabel; begin NewLabel := TLabel.Create(Form1); NewLabel.Parent := Form1; NewLabel.Left := 50; NewLabel.Top := 50; NewLabel.Caption := 'Hallo!'; NewLabel.Visible := True; end; |
Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
Hat funktioniert. Danke!
|
Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
Ok, es geht doch nicht ganz so, wie es sollte.
Sobald die Prozedur nicht mehr zu TForm1 gehört, sondern zu igendner anderen Klasse, die nicht zu einem Formular gehört, und ich die entsprechende Prozedur irgendwo aufruf, kann ich es zwar komplieren aber dann kommt im Programm nach dem Aufruf der Prozedur: "Access Violation ..." Weiss aber nicht, was da falsch ist. |
Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
Gut. So funktionierts. Aber so wie ichs gern hätt immer noch nicht. Hier mal ein Bsp-Code:
(unit2 kennt das Formular nicht, deswegen muss es übergeben werden)
Delphi-Quellcode:
// Unit1:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Test: TTest; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Test.anzeigen(Form1, Form1); end;
Delphi-Quellcode:
So funktionierts. Wenn ich jetzt aber die Deklaration von SpielfeldF nach oben in die Klasse verleg, damit nach der Initialisierung noch andere Prozeduren darauf zugreifen können, kommt "Acess violation". Weiss aber net warum.
//Unit2:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TTest = class procedure anzeigen(Form: TComponent; Cont: TWinControl); end; implementation procedure TTest.anzeigen(Form: TComponent; Cont: TWinControl); var SpielfeldF: TImage; begin SpielfeldF := TImage.Create(Form); SpielfeldF.Parent := Cont; SpielfeldF.Width := 200; SpielfeldF.Height := 400; SpielfeldF.Top := 100; SpielfeldF.Left := 200; SpielfeldF.Visible := true; SpielfeldF.Canvas.Pen.Color := RGB(100,100,100); SpielfeldF.Canvas.Rectangle(0,0,SpielfeldF.Height, SpielfeldF.Width); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 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 by Thomas Breitkreuz