Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Labels nicht in Form1 deklarieren, aber dort anzeigen (https://www.delphipraxis.net/18535-labels-nicht-form1-deklarieren-aber-dort-anzeigen.html)

hagi2 20. Mär 2004 12:24


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?

Wheelie 20. Mär 2004 12:34

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;

hagi2 20. Mär 2004 13:31

Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
 
Hat funktioniert. Danke!

hagi2 20. Mär 2004 17:17

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.

Wheelie 20. Mär 2004 18:02

Re: Labels nicht in Form1 deklarieren, aber dort anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von hagi2
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.

Hast wahrscheinlich irgendwo nen kleinen Fehler (was für 'ne Feststellung :P). Will damit nur sagen, dass es bei mir problemlos geht (auch unitübergreifend). Bevor wir jetzt aber sinnlos rumposten hänge ich die Sache lieber gleich mal mit an mein Posting ran :wink:

hagi2 22. Mär 2004 12:18

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:
//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.
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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