Formular vererben und dynamisch erzeugen

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6919
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Formular vererben und dynamisch erzeugen

Beitrag von Mathias »

Mein Ziel ist es eine eigene Messagebox zu erzeugen.

Message2 geht ohne Probleme. Bei Message will ich ein Erbe von Form machen, das ich MyButton.OnClick auswerten kann.
Bei Message1 kommt ein Fehler, siehe Anhang.

Wie kann ich dies umgehen ?

Code: Alles auswählen

type
 
  { TMyForm }
 
  TMyForm=class(TForm)
//    procedure MyButtonClick(Sender: TObject);
  end;
 
 
  { TMyForm }
 
  //procedure TMyForm.MyButtonClick(Sender: TObject);
  //begin
  //  ShowMessage('Achtung, mein dynamisch erstelltes Formular wird geschlossen!');
  //    if Sender is TButton then
  //    TForm(TButton(Sender).Parent).Close;
  //end;
 
 
procedure Message1(Msg, Caption: string);
var
  MyForm: TMyForm;  // Vererbtes Form
  MyButton: TButton;
begin
  MyForm := TMyForm.Create(nil);
  MyForm.SetBounds(100, 100, 220, 150);
  MyForm.Caption := Caption;
 
  MyButton := TButton.Create(MyForm);
  MyButton.Caption := Msg;
  MyButton.SetBounds(10, 10, 200, 30);
  MyButton.Parent := MyForm;
 
//  MyButton.OnClick := @MyForm.MyButtonClick;
 
  MyForm.ShowModal;
 
  FreeAndNil(MyForm);
end;
 
 
procedure Message2(Msg, Caption: string);
var
  MyForm: TForm;
  MyButton: TButton;
begin
  MyForm := TForm.Create(nil);
  MyForm.SetBounds(100, 100, 220, 150);
  MyForm.Caption := Caption;
 
  MyButton := TButton.Create(MyForm);
  MyButton.Caption := Msg;
  MyButton.SetBounds(10, 10, 200, 30);
  MyButton.Parent := MyForm;
 
//  MyButton.OnClick := @MyForm.MyButtonClick;
 
  MyForm.ShowModal;
 
  FreeAndNil(MyForm);
end;
 
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Message1('Hello World', 'Hinweis');
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Message2('Hello World', 'Hinweis');
end;                
Dateianhänge
Zwischenablage-1.png
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Formular vererben und dynamisch erzeugen

Beitrag von Michl »

Sagt doch die Fehlermeldung. Da für TMyForm keine Ressource gefunden wurde, konnte MyForm nicht erstellt werden. Versuche mal:

Code: Alles auswählen

  MyForm:=TMyForm.CreateNew(nil);
//  MyForm := TMyForm.Create(nil);     
oder in der project.lpr:

Code: Alles auswählen

  RequireDerivedFormResource:=False;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Mathias
Beiträge: 6919
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Formular vererben und dynamisch erzeugen

Beitrag von Mathias »

Danke, jetzt gehts. :)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten