Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MDIForm nicht aktiv (https://www.delphipraxis.net/7904-mdiform-nicht-aktiv.html)

Taladan 24. Aug 2003 00:37


MDIForm nicht aktiv
 
Ich erzeuge aus einen fsNormal Fenster ein fsMDIForm Fenster. Sobald ich jetzt aber eine fsMDIChild gleichzeitig erzeugen will, erhalte ich die Fehlermeldung das meine MDIForm nicht aktiv sei. Auch das öffnen der MDIChild aus den Ereignissen onpaint, oncreate und onshow bringen das gleiche Ergebnis.Wer kann helfen?

Auch wenn TMainform automatisch erzeugt wird und diesen lediglich visible auf false stelle, erhalte ich das selbe Ergebnis.

Mein Code:

Delphi-Quellcode:
  mainform := TMainform.create(self); //fsMDIForm
  mainform.show;
  schritt1 := TSchritt1.create(self); //fsMDIChild
  schritt1.show;
  titelfenster.visible := false;      //fsNormal
Delphi-Quellcode:
  mainform.visible := true;
  mainform.show;
  schritt1 := TSchritt1.create(self);
  schritt1.show;
  titelfenster.visible := false;

JoelH 24. Aug 2003 08:08

hmm,
 
ich bin jetzt nicht sicher aber du musst doch die Child in der Unit der MDIFrom tarten, nicht aus dem Hauptfenster heraus. Denn das MDIForm kann nicht aktiv sein wenn du dich gerade im Code des Hauptfensters befindest. Ich würde den schritt1 in die FormActivate des MDIForms legen.

Taladan 24. Aug 2003 11:29

Re: MDIForm nicht aktiv
 
das bringt immer noch das selbe problem mit sich. selbst beim onaktivate ereignis reagiert es nicht wie es soll.

JoelH 24. Aug 2003 12:15

hmm,
 
Liste der Anhänge anzeigen (Anzahl: 1)
also bei mir geht das.
Ein kleines Projekt
die hauptform :
Delphi-Quellcode:
unit normalform1;

interface

uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls, mdiform;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.xfm}

procedure TForm1.Button1Click(Sender: TObject);
var f : TForm2;
begin
  f := TForm2.Create(self);
  f.show;
end;

end.
die MDIFORM
Delphi-Quellcode:
unit mdiform;

interface

uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls, mdichild;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.xfm}

procedure TForm2.Button1Click(Sender: TObject);
var fchild : TForm3;
begin
  fchild := TForm3.Create(self);
  fchild.show;
end;

end.
und das child
Delphi-Quellcode:
unit mdichild;

interface

uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls;

type
  TForm3 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.xfm}

end.
Das ganze Projekt hab ich mal angehängt, ist allerdings Kylix3 sollte aber als CLX Anwendugn gehen.
geht ohne Probleme.

EDIT: DAs Buttonevent von der MDIForm kann auch im onActivate der Form2 sein, das geht auch.

Taladan 24. Aug 2003 12:37

Re: MDIForm nicht aktiv
 
Dein code gegenüber meinen nur einen unterschied. Der Anwender muß erst auf den Button clicken, damit das die MDIChild geladen wird. Das soll jedoch ohne zutun vom anwender funktionieren. Also MDIForm und MDIChild gleichzeitig öffnen ohne das der Anwender Hand anlegen muß.

JoelH 24. Aug 2003 12:48

Re: MDIForm nicht aktiv
 
hmm, so gehts aber auch, ist dasselbe in grün.
Delphi-Quellcode:
unit mdiform;

interface

uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QStdCtrls, mdichild;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

    procedure FormActivate(Sender: TObject); private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.xfm}

procedure TForm2.Button1Click(Sender: TObject);
var fchild : TForm3;
begin
  fchild := TForm3.Create(self);
  fchild.show;
end;

procedure TForm2.FormActivate(Sender: TObject);
var fchild : TForm3;
begin
  fchild := TForm3.Create(self);
  fchild.show;

end;

end.

Taladan 24. Aug 2003 13:46

Re: MDIForm nicht aktiv
 
ähm hast du auch form2 auf fsMDIForm und form3 auf fsMDIChild gestellt. Obwohl ich deinen gesamten code genutz hab, funktionert der nicht.

(Dein ZIP Projekt funktionert nicht mit meinen Windoff Delphi)

JoelH 24. Aug 2003 13:59

hmm,
 
natürlich hab ich das.

Du kannst ja einfach ein neues Proekt draus machen soviel Quellcode ist es ja nicht. den du abtippen musst. Irgendetwas machst du einfach falsch, scheinbar.


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