Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Form 2 in einer GroupBox öffnen ! (https://www.delphipraxis.net/180068-form-2-einer-groupbox-oeffnen.html)

Popov 20. Apr 2014 23:00

AW: Form 2 in einer GroupBox öffnen !
 
Liste der Anhänge anzeigen (Anzahl: 2)
Also ich hab gerade versucht das Bespiel unter Lazarus auszuführen. Lazarus kennt einige Funktionen nicht, wie z. B. GetWindowRect, SetParent, GetWindowLong, SetWindowLong. Damit läßt sich das obere Beispiel nicht so ohne weiteres umsetzten.

Natürlich sind das alles Windows Api Funktionen, womit sich die Frage stellt ob Lazarus drauf zugreifen kann. Wenn ja, dann dürfte es kein Problem sein. Allerdings kenne ich mich nicht so in Lazarus aus. Anbei das gleiche Beispiel wie oben, aber als Lazarusprojekt. Es funktioniert nicht, da Lazarus die oberen Funktionen nicht kennt. Wer weiß wie man die einbinden kann...

EDIT:

Dieses Beispiel funktioniert.

Ich hab gerade etwas experimentiert und festgestellt, dass alles nötige in Lazarus da ist, auch die oberen Funktionen sind vorhanden. Man muss nur die Unit Windows einbinden. Anscheinend wird die Unit bei Lazarus nicht automatisch eingebunden. Macht man das, dann klappt auch das Beispiel:


Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Windows, ..., Unit2;

Volker Z. 20. Apr 2014 23:03

AW: Form 2 in einer GroupBox öffnen !
 
Hallo,

Zitat:

Zitat von Sir Rufo (Beitrag 1256323)
Es würde klappen, wenn vor dem Setzen des Parents der FormStyle auf
Delphi-Quellcode:
fsNormal
gesetzt würde.

Klappt - in Delphi - auch nach dem Setzen von Parent :wink:.

Worauf ich hinaus wollte: In einer Delphi-Anwendung ein MDIChild erzeugen ohne ein MDIForm als Hauptformular scheppert meines Wissens - keine Ahnung wie das mit Lazarus ist.

Gruß

Sir Rufo 20. Apr 2014 23:16

AW: Form 2 in einer GroupBox öffnen !
 
Ok, ich nehme zwar nicht wirklich alles zurück (das mit dem MDI bleibt), aber das Hauptproblem hier liegt bei
Delphi-Quellcode:
Align := alClient
.

Das mag die LCL nicht ... warum auch immer (würde ich als Bug bezeichnen).
Was geht ist
Delphi-Quellcode:
WindowState := wsMaximized;
.

Allerdings gibt es da wohl ein Problem mit der Aktualisierung des Fensters, denn es wird nur der Bereich (Höhe,Breite) neu gezeichnet, den das Fenster vor der Maximierung eingenommen hatte. Auch das würde ich als Bug ansehen.

Die Bounds der GroupBox stimmen auch nicht (die Caption der Groupbox wird verdeckt)

Ok, problematisch ist der Rahmen der Form ...
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  LForm : TForm;
begin
  // Wenn Parent gesetzt wird, braucht es keinen Owner
  // Auf jeden Fall nicht die Instanz aus der globalen Variable (Form1) nehmen, sondern hier Self
  LForm := TForm2.Create( nil );
  // und auch hier, statt Form1 einfach Self nehmen
  LForm.Parent := Self;
  // Wolltest du nicht in die GroupBox???
  LForm.FormStyle := fsNormal;
  LForm.BorderStyle := bsNone;
  LForm.Align := alCLient;
  LForm.Visible := true;
end;

Michl 25. Jun 2014 08:41

AW: Form 2 in einer GroupBox öffnen !
 
Der Thread ist zwar nicht mehr aktuell, bin aber gerade darüber gestolpert. Für nachfolgende Leser (ich arbeite z.Zt. nur unter Lazarus (Win7)):

@Popov: Das Beispiel eines Formulars in einer Groupbox darstellen funktioniert auch unter Lazarus problemlos, ohne die Einbindung der Unit Windows (plattformunabhängig)!
Code:
uses ..., Unit2;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.BorderStyle:=bsNone;
  Form2.SetBounds(0, 0, GroupBox1.ClientWidth, GroupBox1.ClientHeight);
  Form2.Parent:=GroupBox1;
  Form2.Show;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 Uhr.
Seite 3 von 3     123   

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