Öffnen von MDI Child Fenster
Öffnen von MDI Child Fenster
Ich hab da Probleme mit dem Öffnen eines Child Fensters ... FSStyle:Form1 MDIForm Form2 MDIChild
Es kommt kein Fehler aber Fenster wird auch nicht geöffnet Lazarus 1.6.4 Win7 Home
hat jemand eine Idee ??
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus, Unit2;
type
{ TForm1 }
TForm1 = class(TForm)
MainMenu1: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
OpenDialog1: TOpenDialog;
procedure MenuItem2Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
TForm2.Create(Form1);
end;
end.
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, SynEdit, PrintersDlgs, Forms, Controls, Graphics,
Dialogs, Menus;
type
{ TForm2 }
TForm2 = class(TForm)
FindDialog1: TFindDialog;
MainMenu1: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
PrintDialog1: TPrintDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
ReplaceDialog1: TReplaceDialog;
SaveDialog1: TSaveDialog;
SynEdit1: TSynEdit;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure MenuItem2Click(Sender: TObject);
procedure SynEdit1Change(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.MenuItem2Click(Sender: TObject);
begin
end;
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
Action:=caFree;
end;
end.
Es kommt kein Fehler aber Fenster wird auch nicht geöffnet Lazarus 1.6.4 Win7 Home
hat jemand eine Idee ??
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus, Unit2;
type
{ TForm1 }
TForm1 = class(TForm)
MainMenu1: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
OpenDialog1: TOpenDialog;
procedure MenuItem2Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
TForm2.Create(Form1);
end;
end.
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, SynEdit, PrintersDlgs, Forms, Controls, Graphics,
Dialogs, Menus;
type
{ TForm2 }
TForm2 = class(TForm)
FindDialog1: TFindDialog;
MainMenu1: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
PrintDialog1: TPrintDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
ReplaceDialog1: TReplaceDialog;
SaveDialog1: TSaveDialog;
SynEdit1: TSynEdit;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure MenuItem2Click(Sender: TObject);
procedure SynEdit1Change(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.MenuItem2Click(Sender: TObject);
begin
end;
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
Action:=caFree;
end;
end.
Win 7 FPC 3.2.0 Laz 2.0.12
- gladio
- Beiträge: 223
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: Öffnen von MDI Child Fenster
da fehlt doch irgendwo die Routine zum Anzeigen deines Formulars
sowas wie FormXYZ.show oder FormXYZ.ShowModal
nach dem Erzeugen mit .Create
sowas wie FormXYZ.show oder FormXYZ.ShowModal
nach dem Erzeugen mit .Create
Re: Öffnen von MDI Child Fenster
Weil du mit MDI arbeitest, nehme ich an, dass du mehrere Instanzen von TForm2 erzeugen willst. Dann wäre das der richtige Code:
Dennoch wirst du damit kein echtes MDI-Verhalten (Form2 in Form1 eingebettet) sehen, weil Lazarus MDI-Formulare und -Fenster nicht vollständig implementiert. Nimm stattdessen MultiDoc/MultiFrame (http://wiki.lazarus.freepascal.org/MultiDoc).
Code: Alles auswählen
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
with TForm2.Create(self) do
Show;
end;
-
- Beiträge: 2129
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Öffnen von MDI Child Fenster
Nur so am Rand, finger Weg von MDI. Microsoft würde am liebsten MDI in der Windows Forms API komplett entfernen, wenn es nicht Aufgrund von Kompaitibität drin bleiben müsste. Allerdings wird an MDI nichts mehr verbessert, und neue Funktionen der Windows Forms API schaffen es oftmals nicht, oder nur Dummyweise in MDI Formulare (z.B. Glass Frames und Opacity). Ich weiß Pascalentwickler verwenden gerne Technologien die seit 20 Jahren tot sind, aber MDI tut niemanden einen Gefallen. Benutz lieber normale Fenster, so wie Lazarus (ohne Anchordocking) es verwendet.
Außerdem ist MDI afaik nicht Cross kompatibel mit OSX oder GTK, nur zwischen QT und Windows. Falls du unbedingt MDI verwenden musst (naja außer das dich jemand bedroht wenn dus nicht machst fällt mir kein Grund ein MDI überhaupt anzufassen), dann verwende wenigstens Lazarus Interne Lösungen wie Mutlidoc, aber auf gar keinen Fall verwende die Systemschnittstelle. Um mal ein weiteres Argument anzuführen, für jedes MDI Programm mehr, hat Microsoft einen Grund mehr sich mit der Wartung dieser Schnittstelle zu beschäftigen, und damit wird der Preis von Windows teurer.
Außerdem ist MDI afaik nicht Cross kompatibel mit OSX oder GTK, nur zwischen QT und Windows. Falls du unbedingt MDI verwenden musst (naja außer das dich jemand bedroht wenn dus nicht machst fällt mir kein Grund ein MDI überhaupt anzufassen), dann verwende wenigstens Lazarus Interne Lösungen wie Mutlidoc, aber auf gar keinen Fall verwende die Systemschnittstelle. Um mal ein weiteres Argument anzuführen, für jedes MDI Programm mehr, hat Microsoft einen Grund mehr sich mit der Wartung dieser Schnittstelle zu beschäftigen, und damit wird der Preis von Windows teurer.
-
- Beiträge: 6926
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Öffnen von MDI Child Fenster
MDI war eines der wenigen Sachen, die M$ gut machte, und ausgerechnet dies soll verschwinden.Nur so am Rand, finger Weg von MDI. Microsoft würde am liebsten MDI in der Windows Forms API komplett entfernen,

Ich fand es noch recht praktisch, man konnte sehr schnell 2 Fenster neben/unter einander legen. Oder auch überlappen.
Für einen Texteditor fand ich dies sehr praktisch. Turbp-Pascal hatte dies schon sehr gut hingekriegt, obwohl es im Text-Modus lief,.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 29
- Registriert: Fr 19. Mai 2017, 18:04
- OS, Lazarus, FPC: Win10x64, L 1.8rc3, FPC3.0.2
- CPU-Target: 64
- Wohnort: Nord-Baden
- Kontaktdaten:
Re: Öffnen von MDI Child Fenster
@Warf: Wenn Du schon auf Multidoc verweist dann solltest Du auch erwähnen, daß das ebenfalls seit Jahren nicht mehr weiterentwickelt wird. Und dem Packet eine wichtige Komponente (ich meine lMDI) fehlt. Mit etwas Mühe habe ich beides gefunden. und versuche dies grad in die Lazarus-CCR einpflegen zu lassen. Aber dort scheint kein großen Interesse daran zu bestehen.
https://bugs.freepascal.org/view.php?id=31924
Sparta_MDI steht in den jedoch in den Startlöchern um diese Lücke zu füllen.
https://bugs.freepascal.org/view.php?id=31924
Sparta_MDI steht in den jedoch in den Startlöchern um diese Lücke zu füllen.
OS: ...-Win10 x64
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
-
- Beiträge: 2129
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Öffnen von MDI Child Fenster
Das kann man mit nicht MDI Fenstern auch, und damit kann man sogar gleichtzeitg die Windows Taskbar und multiple Bildschirme Unterstützen, was mit MDI nicht geht.Mathias hat geschrieben:MDI war eines der wenigen Sachen, die M$ gut machte, und ausgerechnet dies soll verschwinden.Nur so am Rand, finger Weg von MDI. Microsoft würde am liebsten MDI in der Windows Forms API komplett entfernen,![]()
Ich fand es noch recht praktisch, man konnte sehr schnell 2 Fenster neben/unter einander legen. Oder auch überlappen.
Für einen Texteditor fand ich dies sehr praktisch. Turbp-Pascal hatte dies schon sehr gut hingekriegt, obwohl es im Text-Modus lief,.
ich kenne mich selbst damit nicht gut aus, ich habe es nur angeführt weil es das erste war was ich gefunden hab was LCL intern läuft.jc99 hat geschrieben:@Warf: Wenn Du schon auf Multidoc verweist dann solltest Du auch erwähnen, daß das ebenfalls seit Jahren nicht mehr weiterentwickelt wird. Und dem Packet eine wichtige Komponente (ich meine lMDI) fehlt. Mit etwas Mühe habe ich beides gefunden. und versuche dies grad in die Lazarus-CCR einphlegen zu lassen. Aber dort scheint kein großen interesse daran zu bestehen.
https://bugs.freepascal.org/view.php?id=31924
-
- Beiträge: 29
- Registriert: Fr 19. Mai 2017, 18:04
- OS, Lazarus, FPC: Win10x64, L 1.8rc3, FPC3.0.2
- CPU-Target: 64
- Wohnort: Nord-Baden
- Kontaktdaten:
Re: Öffnen von MDI Child Fenster
Das ist leider nur die halbe Wahrheit, es funktioniert mit noch mit 4-5 offenen Fenstern, jetzt stell dir aber Lazarus ohne Docking und Tabbing(Ist so eine Unter-Art von MDI) vor mit einem richtig großen Projekt, z.B: der FP-IDE mit 30-40 Dateien. Eventuell auch noch mit separaten Form-Designern. Das alles willst du über die Task-Bar regeln ? Das mit mehreren Monitoren ist ein Argument. Lazarus und andere IDE lösen das indem man ein zweites Fenster aufmacht und die benötigten Dateien dann in das zweite Fenster schiebt.Warf hat geschrieben: Das kann man mit nicht MDI Fenstern auch, und damit kann man sogar gleichtzeitg die Windows Taskbar und multiple Bildschirme Unterstützen, was mit MDI nicht geht.
OS: ...-Win10 x64
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
-
- Beiträge: 2129
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Öffnen von MDI Child Fenster
Man muss die tastbar ja nicht verwenden, aber man kann. Darauf wollte ich hinaus. Man kann ohne MDI mit normalen Fenstern das selbe erreichen wie mit MDI, aber ohne die Limitierungen von MDIjc99 hat geschrieben:Das ist leider nur die halbe Wahrheit, es funktioniert mit noch mit 4-5 offenen Fenstern, jetzt stell dir aber Lazarus ohne Docking und Tabbing(Ist so eine Unter-Art von MDI) vor mit einem richtig großen Projekt, z.B: der FP-IDE mit 30-40 Dateien. Eventuell auch noch mit separaten Form-Designern. Das alles willst du über die Task-Bar regeln ? Das mit mehreren Monitoren ist ein Argument. Lazarus und andere IDE lösen das indem man ein zweites Fenster aufmacht und die benötigten Dateien dann in das zweite Fenster schiebt.Warf hat geschrieben: Das kann man mit nicht MDI Fenstern auch, und damit kann man sogar gleichtzeitg die Windows Taskbar und multiple Bildschirme Unterstützen, was mit MDI nicht geht.
Und außerdem, habe ich eh nie mehr als 5-6 Dateien gleichzeitig offen, ich kann eh maximal 3-4 gleichzeitig betrachten, also habe ich auch nur diese offen
Re: Öffnen von MDI Child Fenster
Woher willst du es wissen?Warf hat geschrieben:Nur so am Rand, finger Weg von MDI. Microsoft würde am liebsten MDI in der Windows Forms API komplett entfernen, wenn es nicht Aufgrund von Kompaitibität drin bleiben müsste. Allerdings wird an MDI nichts mehr verbessert, und neue Funktionen der Windows Forms API schaffen es oftmals nicht, oder nur Dummyweise in MDI Formulare (z.B. Glass Frames und Opacity). Ich weiß Pascalentwickler verwenden gerne Technologien die seit 20 Jahren tot sind, aber MDI tut niemanden einen Gefallen. Benutz lieber normale Fenster, so wie Lazarus (ohne Anchordocking) es verwendet.
Außerdem ist MDI afaik nicht Cross kompatibel mit OSX oder GTK, nur zwischen QT und Windows. Falls du unbedingt MDI verwenden musst (naja außer das dich jemand bedroht wenn dus nicht machst fällt mir kein Grund ein MDI überhaupt anzufassen), dann verwende wenigstens Lazarus Interne Lösungen wie Mutlidoc, aber auf gar keinen Fall verwende die Systemschnittstelle. Um mal ein weiteres Argument anzuführen, für jedes MDI Programm mehr, hat Microsoft einen Grund mehr sich mit der Wartung dieser Schnittstelle zu beschäftigen, und damit wird der Preis von Windows teurer.
in meinem Delphi7 Projekt (über 100.000 LOC, und knapp 100 Forms) nutze ich MDI-s.
Die Art wie MDI Forms in Freepascal behandelt werden ist , mild gesagt nicht schön. Beim übersetzen wird keine Fehlermeldung ausgegeben. Im Ablauf werden die Childs nicht innerhalb des Hauptfensters angezeigt und können auch nicht als Childs erkannt werden.
Die angebotene Alternative Multidoc funktioniert nicht (das Demoprogramm stürzt ab).
Also das Fette soll heißen:
Finger weg vom Lazarus, wenn man MDI Childs benutzen möchte.
Übrigens Visual Basic unterstützt MDI Childs!
-
- Beiträge: 2129
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Öffnen von MDI Child Fenster
Nun es gibt einige Indizien, z.B. der Satz (auf irgendeiner der MSDN Seiten bezüglich MDI): Seit Windows 95 findet man fast ausschließlich SDI Anwendungen, da Windows mittlerweile Dokumentzentriert ist. (Paraphrasiert, ich kenne den original Satz nicht auswendig)Toni7878 hat geschrieben:Woher willst du es wissen?
in meinem Delphi7 Projekt (über 100.000 LOC, und knapp 100 Forms) nutze ich MDI-s.
Die Art wie MDI Forms in Freepascal behandelt werden ist , mild gesagt nicht schön. Beim übersetzen wird keine Fehlermeldung ausgegeben. Im Ablauf werden die Childs nicht innerhalb des Hauptfensters angezeigt und können auch nicht als Childs erkannt werden.
Die angebotene Alternative Multidoc funktioniert nicht (das Demoprogramm stürzt ab).
Also das Fette soll heißen:
Finger weg vom Lazarus, wenn man MDI Childs benutzen möchte.
Übrigens Visual Basic unterstützt MDI Childs!
Oder die Tatsache das für MDI seit Windows 95 keine neuen Features kamen, sondern jedwede Entwicklung nur zur Kompatiblitätserhaltung war.
Aber das stärkste Indiz ist mMn das Microsoft in WPF nicht mal ansatzweise MDI implementiert haben, und WPF soll unter .Net die Windows Forms fast komplett ersetzen (Windows Forms sollen nur noch in Spezialfällen verwendet werden, z.B. bei sehr geringer Rechenleistung).
Und diese 3 Indizien sprechen mMn dafür das Microsoft MDI am liebsten vergessen würde.
Außerdem, Delphi 7 ist nicht grade das beste Beispiel für State of the Art Entwicklung
-
- Beiträge: 29
- Registriert: Fr 19. Mai 2017, 18:04
- OS, Lazarus, FPC: Win10x64, L 1.8rc3, FPC3.0.2
- CPU-Target: 64
- Wohnort: Nord-Baden
- Kontaktdaten:
Re: Öffnen von MDI Child Fenster
Da hast Du recht Delphi 7 ist definitiv nicht State of the Art, eine deutlich bessere IDE bietet die Delphi XE - Serie (kann MDI), Eclipse sieht auch nach MDI aus, Visual Studio ebenfalls MDI (zumindest im Hintergrund) um nur ein paar zu nennen.Warf hat geschrieben: Außerdem, Delphi 7 ist nicht grade das beste Beispiel für State of the Art Entwicklung
Ich seh MDI in allen "modernen" Programmen (ausser GIMP)
OS: ...-Win10 x64
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
Laz: ...-1.8rc1
https://github.com/joecare99/public
'~| . . /'' . .
,_|oe \_,are
-
- Beiträge: 2129
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Öffnen von MDI Child Fenster
Ob Delphi XE wirklich besser ist sei mal dahingestellt (Langsam, crasht regelmäßig), aber das eine IDE dessen Developer community zur Großen Teilen aus der Ära von MDI stammt MDI unterstützt ist nicht verwunderlich. Eclipse ist in Java geschrieben, und damit verwendet es keine Windows Forms, sondern eine unabhängiges von Java selbstgerendertes GUI, weshalb das mit Microsofts WindowsForms MDI nichts zu tun hat. Und das Visual Studio MDI verwendet wage ich stark zu bezweifeln, da zumindest die neueren Versionen von VS (>2012) mit WPF als GUI Framework geschrieben wurde, was wie bereits erwähnt, kein MDI unterstützt (außer mit extrernen Frameworks, welche eigentlich nur selbst gezeichnete Containerkomponenten verwenden, aber kein echtes MDI).jc99 hat geschrieben:Da hast Du recht Delphi 7 ist definitiv nicht State of the Art, eine deutlich bessere IDE bietet die Delphi XE - Serie (kann MDI), Eclipse sieht auch nach MDI aus, Visual Studio ebenfalls MDI (zumindest im Hintergrund) um nur ein paar zu nennen.Warf hat geschrieben: Außerdem, Delphi 7 ist nicht grade das beste Beispiel für State of the Art Entwicklung
Ich seh MDI in allen "modernen" Programmen (ausser GIMP)
Was mittlerweile viel verwendet wird ist TDI (Tabbed Document Interface), bei dem die Funktionalität von MDI verwendet wird um Forms auf andere Controls zu schieben (hauptsächlich Tabs). Das hat den Vorteil das man Tabs und Fenster Funktionalitäten gleichwertig verwenden kann. Diese Funktionalität wird auch von Microsoft noch verwendet (auch in WPF), aber von dem Klassischen MDI (Also tatsächlich richtige Fenster mit Boarder, Movable, etc) stirbt (mMn zurecht) aus.
Also treffender wäre, es werden Teile von MDI verwendet um neue Technologien (wie TDI) zu realisieren, klassisches MDI ist aber mehr oder weniger tot, und nur noch Teile werden Recycled. Aber wenn ich mir eine Plastiktüte beim Supermarkt hole nenn ich das ja auch nicht Flasche, nur weil es vor dem Recycling mal eine gewesen ist.
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Öffnen von MDI Child Fenster
Ja leider, war auch für mich der Grund ein großes Projekt von MDI weg auf Einzelfenster umzustellen.Warf hat geschrieben:Seit Windows 95 findet man fast ausschließlich SDI Anwendungen, da Windows mittlerweile Dokumentzentriert ist.
MDI hatte für mich als Programmierer (z.B. Atmel Studio) immer den Vorteil, dass man verschiedene Dateien eines Projektes problemlos nebeneinander anordnen kann, auch schnell mal 4 Fenster in 4 Ecken. Inzwischen ist das ein Krampf, da muss man die Datei nochmal in einem extra Editor aufmachen, oder wie in Lazarus mit Dockingfenstern rummachen, oder bei Firefox mehrere Browser aufmachen. Im OpenOffice bekommt man auch pro Datei ein Fenster, letztens sass ich vor einem Fremdrechner, und der wollte mir partout die beiden Exceldateien nur in einem Fenster zeigen, ging also nicht nebeneinander. Oder der Krampf bei Gimp, 5 Fenster für Menu, Bild, Ebenen, Zeichenwerkzeuge und so offen und das was man braucht ist immer irgendwo verdeckt.
-
- Beiträge: 6926
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Öffnen von MDI Child Fenster
Es ist schon komisch, das von von den genialsten Sachen weg kommt. MDI war bei Win3.x die Highlight.
Wie du schon schreibst, man kann mehrere Fenster auf machen, aber dann ist das Ganze Menu und auch die Symbol-leiste, etc. mehrfach vorhanden.
Gut die Monitore werden immer grösser, aber ob das der Sinn der Sache ist.
Wie du schon schreibst, man kann mehrere Fenster auf machen, aber dann ist das Ganze Menu und auch die Symbol-leiste, etc. mehrfach vorhanden.

Gut die Monitore werden immer grösser, aber ob das der Sinn der Sache ist.

Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot