AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Form 2 in einer GroupBox öffnen !
Thema durchsuchen
Ansicht
Themen-Optionen

Form 2 in einer GroupBox öffnen !

Ein Thema von Alterauge · begonnen am 20. Apr 2014 · letzter Beitrag vom 25. Jun 2014
Antwort Antwort
Seite 3 von 3     123   
Popov
(Gast)

n/a Beiträge
 
#21

AW: Form 2 in einer GroupBox öffnen !

  Alt 21. Apr 2014, 00:00
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;
Miniaturansicht angehängter Grafiken
beispiel_lazarus.png  
Angehängte Dateien
Dateityp: zip ParentWindow Beispiel (Lazarus).zip (65,7 KB, 4x aufgerufen)

Geändert von Popov (21. Apr 2014 um 00:30 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#22

AW: Form 2 in einer GroupBox öffnen !

  Alt 21. Apr 2014, 00:03
Hallo,

Es würde klappen, wenn vor dem Setzen des Parents der FormStyle auf fsNormal gesetzt würde.
Klappt - in Delphi - auch nach dem Setzen von Parent .

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ß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#23

AW: Form 2 in einer GroupBox öffnen !

  Alt 21. Apr 2014, 00:16
Ok, ich nehme zwar nicht wirklich alles zurück (das mit dem MDI bleibt), aber das Hauptproblem hier liegt bei Align := alClient .

Das mag die LCL nicht ... warum auch immer (würde ich als Bug bezeichnen).
Was geht ist 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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (21. Apr 2014 um 00:30 Uhr)
  Mit Zitat antworten Zitat
Michl

Registriert seit: 8. Jul 2013
1 Beiträge
 
#24

AW: Form 2 in einer GroupBox öffnen !

  Alt 25. Jun 2014, 09:41
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;

Geändert von Michl (25. Jun 2014 um 09:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 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