Delphi-PRAXiS

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)

Alterauge 20. Apr 2014 15:26

Form 2 in einer GroupBox öffnen !
 
Hallo,

ist es Möglich ein Form in einer GroupBox zu öffnen?

Habe zum Beispiel im Form 1 zwei GroupBoxen, in der zweiten GroupBox2 ( Algin(alclient)) möchte ich jetzt gerne ein Form 2 öffnen.
Das Form 2 sollte sich aber nur in dieser GroupBox 2 bewegen können.

Hat einer eine Idee ?

Sir Rufo 20. Apr 2014 15:43

AW: Form 2 in einer GroupBox öffnen !
 
Parent auf die GroupBox setzen?

Alterauge 20. Apr 2014 15:52

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

wenn ich jetzt zum Beispiel ein Form über Button 1 öffnen würde,
würde es so aussehen.

Delphi-Quellcode:
 Form2.show;

Jetzt möchte ich aber, dass das Form 2 in der GroupBox geöffnet wird.
Wie bekomme ich das hin ?

Danke für Deine Hilfe :-)

himitsu 20. Apr 2014 16:09

AW: Form 2 in einer GroupBox öffnen !
 
Wurde doch schon gesagt?

Zitat:

Zitat von Sir Rufo (Beitrag 1256278)
Parent auf die GroupBox setzen?

Delphi-Quellcode:
Form2.Parent := ...;
Form2.Show;

Alterauge 20. Apr 2014 16:50

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

ich noch mal ;-) leider geht es nicht!
Das ganze läuft unter Lazarus ?

???

Alterauge 20. Apr 2014 18:50

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

mit Delphi geht es auch nicht :shock:

CocoPops 20. Apr 2014 19:35

AW: Form 2 in einer GroupBox öffnen !
 
Geht nicht, gibt's nicht.
Teile uns doch mal deinen Code mit dann können wir vielleicht helfen.

Alterauge 20. Apr 2014 20:07

AW: Form 2 in einer GroupBox öffnen !
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

hier erstmal der Code :

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Form2 := TForm2.Create(Form1);
  Form2.Parent := Form1;
   Form2.FormStyle := fsNormal;
    Form2.Visible := true;
end;
Fehlermeldung als Anhang

Helmi 20. Apr 2014 20:26

AW: Form 2 in einer GroupBox öffnen !
 
Liste der Anhänge anzeigen (Anzahl: 1)
also so funktioniert´s bei mir:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

   Form2.Parent := GroupBox1;
    Form2.FormStyle := fsNormal;
     Form2.Visible := true;
end;
Wobei Form2 bei mir beim Testen schon vorhanden war

himitsu 20. Apr 2014 20:28

AW: Form 2 in einer GroupBox öffnen !
 
Form1?

Delphi-Quellcode:
Form2 := TForm2.Create(Self);
Form2.Parent := Self;
Form2.FormStyle := fsNormal;
Form2.Visible := true;
Aber ich dachte es soll in eine GroupBox?

Delphi-Quellcode:
Form2 := TForm2.Create(Self);
Form2.Parent := GroupBox1;
Form2.FormStyle := fsNormal;
Form2.Visible := true;
Bei welchem Befehl tritt nun eigentlich der Fehler auf?
Wobei ich ebenfalls wette, daß genau dieser Code bei mir im Delphi auch läufen würde.


Und grade dieses BitBtn1Click ist ein gutes Beispiel, warum man nicht auf diese globalen Variablen zugreifen sollte.

Was steht in der Form2, wenn ich zweimal draufklicke
und vorallem was steht da drin, wenn ich das letzte Fenster wieder schließe?

Alterauge 20. Apr 2014 20:44

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

habe nur die Probleme, wenn das Form 2 auf (Align : alClient) steht! :?

Helmi 20. Apr 2014 20:49

AW: Form 2 in einer GroupBox öffnen !
 
Zitat:

Zitat von Alterauge (Beitrag 1256305)
Hallo,

habe nur die Probleme, wenn das Form 2 auf (Align : alClient) steht! :?

verrätst du uns auch was für Probleme?

Also bei mir geht das Darstellen einer Form in einer GroupBox mit Align = alClient

Alterauge 20. Apr 2014 20:52

AW: Form 2 in einer GroupBox öffnen !
 
ich verstehe es gerade auch noch nicht!
arbeite zurzeit auch mit lazarus :(

Alterauge 20. Apr 2014 21:03

AW: Form 2 in einer GroupBox öffnen !
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier noch ein Anhang :

Helmi 20. Apr 2014 21:22

AW: Form 2 in einer GroupBox öffnen !
 
warum "weigerst" du dich, der Form2 auch das zu sagen, was sie laut deiner Aussage tun soll: In der GroupBox sichtbar zu sein

In deinem Bild ist zu sehen, dass da immer noch steht
Delphi-Quellcode:
Form2.parent := Form1;
,
es wurde aber schon mehrmals darauf hingewiesen, dass es
Delphi-Quellcode:
Form2.parent := GroupBox1; //oder wie auch immer deine GroupBox heisst
lauten muss

Alterauge 20. Apr 2014 21:57

AW: Form 2 in einer GroupBox öffnen !
 
hallo helmi,

habe es mit der GroupBox1, Panel1 und mit der Form1 versucht.
Es liegt bestimmt an Lazarus ???

CocoPops 20. Apr 2014 22:08

AW: Form 2 in einer GroupBox öffnen !
 
Wechsel schon einmal zum kostenlosen Turbo Delphi. Damit hast du sehr viel weniger Probleme.

Popov 20. Apr 2014 22:37

AW: Form 2 in einer GroupBox öffnen !
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein kleines (Delphi)Beispiel, rauskopiert aus einem meiner Bildschirmschoner, und leicht angepasst.

Form2 wird in eine GroupBox gesetzt.

Volker Z. 20. Apr 2014 22:44

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

Zitat:

Es liegt bestimmt an Lazarus ???
Ich kenne Lazarus nicht, daher rate ich jetzt mal:
Delphi-Quellcode:
Form2.FormStyle := fsMDIChild
könnte problematisch sein - irgendwie sieht mir Dein Form1 auch nicht wie ein MDIForm aus -, aber vielleicht liege damit auch völlig falsch.

Gruß

Sir Rufo 20. Apr 2014 22:52

AW: Form 2 in einer GroupBox öffnen !
 
Es würde klappen, wenn vor dem Setzen des Parents der FormStyle auf
Delphi-Quellcode:
fsNormal
gesetzt würde.

Allerdings drängt sich durchaus die Frage auf, warum FormStyle auf
Delphi-Quellcode:
fsMDIChild
steht (wenn es doch eh keine MDI-Anwendung wird) :roll:

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 19:36 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