AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Formstyle, Neuerstellen des Fensters verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Formstyle, Neuerstellen des Fensters verhindern

Offene Frage von "Alaitoc"
Ein Thema von Alaitoc · begonnen am 12. Jan 2010 · letzter Beitrag vom 18. Jan 2010
Antwort Antwort
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#1

Formstyle, Neuerstellen des Fensters verhindern

  Alt 12. Jan 2010, 11:13
Hallo DP-Community!

Ich habe ein Problem mit FormStyle, da beim ändern jedes Mal das Fenster neu erstellt wird und die Objekte auf dem Formular neuerstellt werden.

Also ich habe ein MDI-Child, das wenn man auf einen Button drückt aus dem Hauptformular springen soll und sich dann wie ein normales Formular verhalten soll.

Also ich bräuchte den Wechseln von

FormStyle := fsMDIChild; zu
FormStyle := fsNormal; und natürlich wieder zurück , ohne dass das Fenster neuerstellt wird !

Da hat doch sicherlich einer eine Idee oder?

MfG Alaitoc
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 12. Jan 2010, 13:47
So ich schaffe es nun mit Hilfe von:

Delphi-Quellcode:
         
SetWindowLong( Handle, GWL_HWNDPARENT, GetDesktopWindow );
SetWindowLong( Handle, GWL_STYLE, ( GetWindowLong( Handle, GWL_STYLE ) and not WS_CHILD and not WS_CLIPCHILDREN ) );
das Fenster aus dem MDI-Form zu kriegen...jedoch will es nicht wieder hinein mit:
Delphi-Quellcode:
SetWindowLong( Handle, GWL_HWNDPARENT, Application.MainForm.Handle );
SetWindowLong( Self.Handle, GWL_STYLE, ( GetWindowLong( Self.Handle, GWL_STYLE ) or WS_CHILD or WS_CLIPCHILDREN ) );
Hat jemand eine Idee?

MfG Alaitoc
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 13. Jan 2010, 07:51
Morgen und...

http://fnse.de/S02/15S.gif
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 14. Jan 2010, 11:01
Phew...ich bin etwas weitergekommen

Formstyle muss fsMDIChild sein.

Variablen:
Delphi-Quellcode:
FGenericFormStyle: TGenericFormStyle;
FOldGWL_STYLE: Integer;
FOldGWL_EXSTYLE: Integer;
FOldParent: HWND;
Zum rausschmeißen:
Delphi-Quellcode:
FOldGWL_STYLE := GetWindowLong(Handle,GWL_STYLE);
FOldGWL_EXSTYLE := GetWindowLong(Handle,GWL_EXSTYLE);
FOldParent := Windows.GetParent(Handle);

Windows.SetParent(Self.Handle, GetDesktopWindow);
SetWindowLong(Handle, GWL_STYLE, ( GetWindowLong( Handle, GWL_STYLE )
                                 and not WS_CHILD
                                 and not WS_CLIPSIBLINGS
                                 and not WS_CLIPCHILDREN ));
SetWindowLong(Handle, GWL_STYLE, ( GetWindowLong( Handle, GWL_STYLE )
                                 and not WS_GROUP
                                 or WS_TABSTOP ));
SetWindowLong(Handle, GWL_EXSTYLE, ( GetWindowLong( Handle, GWL_EXSTYLE )
                                   and not WS_EX_MDICHILD
                                   and not WS_EX_TOPMOST
                                   or WS_EX_NOPARENTNOTIFY ));
FGenericFormStyle := gfsNormal;
Zum reinpacken:

Delphi-Quellcode:
SetWindowLong(Handle, GWL_STYLE, FOldGWL_STYLE );
SetWindowLong(Handle, GWL_EXSTYLE, FOldGWL_EXSTYLE );
Windows.SetParent(Handle, FOldParent);
FGenericFormStyle := gfsMDIChild;
Jetzt hab ich das Problem das das Hauptformular dann nicht mehr den Fokus erhalten kann, jemand eine Idee?
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 18. Jan 2010, 11:20
Hm bin immernoch nicht weitergekommen...hat irgendjemand vll. einen Geistesblitz oder
einen anderen Ansatz wie man das lösen könnte?

MfG Alaitoc
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#6

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 18. Jan 2010, 11:25
She ich das richtig, daß Du eigentlich nur nicht nochmal durch die OnCreates bzw. OnShows durch gehen möchtest, wenn Du den Style änderst? Wenn ja, dann leg halt die entsprechenden Ereignisse vorübergehend lahm.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 18. Jan 2010, 11:33
Was ich lahm legen will ist in gewisser Weise das das Fenster neuerstellt wird,
da dabei Komponenten auf den Anfangszustand zurückgesetzt werden.

Sozusagen die Methode RecreateWnd die durch SetPosition aufgeruft wird und SetPosition
wird während des FormStyle änderns geändert.

Delphi-Quellcode:
procedure TWinControl.RecreateWnd;
begin
  if FHandle <> 0 then Perform(CM_RECREATEWND, 0, 0);
end;
MfG Alaitoc
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#8

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 18. Jan 2010, 11:38
Und wenn Du Dir den Zustand/Inhalt der Controls merkst und nach der "Umwandlung" setzt? Geht eventuell schneller als noch länger zu forschen...

Sherlock
Oliver
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Formstyle, Neuerstellen des Fensters verhindern

  Alt 18. Jan 2010, 11:44
Normalerweise schon, jedoch soll die Komponente eigentlich noch öfters verwendet werden
und da müsste man ja je nachdem was für spezielle Controls man dort drauflegt einen riesigen Aufwand
betreiben um alles zu sichern und wiederherzustellen :/

Theorethisch habe ich es ja zu 90% hingekriegt mit den API-Funktionen, jedoch will das Hauptformular unter keinen Umstand mehr den Fokus erhalten...aber man kann es halt noch verschieben und sobald man loslässt wird wieder das MDI-Child auf dem Desktop ausgewählt :/

MfG Alaitoc
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:15 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