Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einfügen von Frames (https://www.delphipraxis.net/25788-einfuegen-von-frames.html)

Sunlight 12. Jul 2004 15:40


Einfügen von Frames
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

bin noch sehr neu in der Delphi und OOP-Welt und ich schlage mich schon das ganze Wochenende mit folgendem Problem herum:
Ich möchte in ein TForm dynamisch zur Laufzeit Frames (in Unit2 definiert) auf ein OnClick- Ereignis einbinden, d.h. mit jedem Click soll eine neue Zeile (Frame) eingeblendet werden.
Unit 1:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;
  MyPanel: TPanel;
  i: Integer;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyFrame: TFrame1;
begin
  MyFrame := TFrame1.Create(self);
  MyFrame.Parent := self;
end;
end.
Einmalig klappt das auch sehr schön, beim zweiten Mal bekomme ich dann aber einen Fehler: 'A component named Frame1 already exists'.
Wenn ich einen ähnlichen Aufruf, aber statt TFrame1 beispielsweise TPanel nehme klappt es wunderbar.

Und dann gleich noch ein weiteres Problem im Unit2 (Frame). Dort habe ich einen Button eingebaut, mit dem der Frame wieder gelöscht werden soll (mittels free). auch hier bekomme ich eine Fehler bei Ausführung: Access Violation
Delphi-Quellcode:
type
  TFrame1 = class(TFrame)
    delete: TButton;
    procedure deleteClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

{$R *.dfm}

procedure TFrame1.deleteClick(Sender: TObject);
begin
  self.Free;
end;
end.

Ich bin für jede Idee/Anregung dankbar :-D
Hans

alcaeus 12. Jul 2004 15:48

Re: Einfügen von Frames
 
Zu 1: Bevor du dem Frame ein Parent zuweist, musst du die Name-Eigenschaft des Frames neu setzen. Am Besten sind hierfür TDateTime-Werte, da diese einmalig sind (ändern sich in sehr kleinen Abständen). Allerdings kannst du die Frames dann nur noch schlecht mit FindComponent finden, falls das bei dir der Fall ist.

Zu 2: AFAIK darfst du eine Komponente nicht in einer ihrer Ereignisbehandlungsroutinen freigeben. Wie du das Problem umgehen kannst weiß ich auf die Schnelle allerdings nicht.

Greetz
alcaeus

Sunlight 12. Jul 2004 18:52

Re: Einfügen von Frames
 
zu 1)
@alcaeus
Klasse :-) so klappt es auch!


zu 2) da werde ich nochmal auf die Suche gehen; es müsste doch dafür möglich sein, dass das Child dem Parent ein Signal gibt es zu löschen

alcaeus 12. Jul 2004 19:53

Re: Einfügen von Frames
 
Zu 2 kann ich dir auch gleich einen Link anbieten:
http://www.delphipraxis.net/internal...ct.php?t=29732

Greetz
alcaeus


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