[delphi] window op taakbalk perikeltjes

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Op internet zijn er tal van pagina's te vinden waarop deze simpele code te vinden is...
Delphi:
1
2
3
4
5
6
7
8
9
//In je form-declaratie, onder protected:
procedure CreateParams(var Params: TCreateParams); override;

//En de implmentatie:
procedure TDocumentForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

Maargoed, deze code kan iedere ervaren delphi-programmeur wel uit de mouw kloppen. Het probleem met deze code is nml twee dingen:
  1. Als je zo'n child form actief hebt, in de taakbalk op de knop van je mainform klikt, dan werkt dat niet. Hij floept gelijk terug naar dit child form.
  2. Als je je mainform minimaliseert dan worden alle child forms ook gelijk geminimaliseerd. Standaard gedrag van delphi is dat vgs mij, maar in deze situatie moet dat dus niet.
Weet iemand hoe je dit op zou kunnen lossen?

日本!🎌


Verwijderd

childs kunnen in de parent window zelf gelokeerd zijn, dan zullen ze zeker mee minimaliseren, maar je kan de childs ook vrij laten zweven als afzonderlijke windows terwijl ze toch childs zijn van een parent, verder kan je van windows nog de owner window aanpassen...

kortom, een window heeft een parent en een owner, misschien kan je de desktopwindow als parent zetten bij minimaliseren...

maar ik ben c++ gewend,...

misschien heb je nog wat aan WS_EX_TOOLWINDOW...

[ Voor 6% gewijzigd door Verwijderd op 13-03-2004 22:54 ]


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 15:56

Tomatoman

Fulltime prutser

offtopic:
childs --> children


Wat jij beschrijft is het standaardgedrag van een Windowsapplicatie, dat is niets unieks voor Delphi. Kun je uitleggen waarom het child window moet blijven staan als de main app geminimaliseerd is? Je minimaliseert een applicatie toch niet voor niets?

Een goede grap mag vrienden kosten.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Met child window bedoel ik dus gewoon een los window. een doodnormaal window dat ik via TMyLittleChildWindow.Create(Self).Show; aanroep.

Het wordt een applicatie die zich net zo moet gedragen als Outlook, waarvan mail-vensters dus "los" staan van het mainform.

日本!🎌


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 26-05 11:18

alienfruit

the alien you never expected

Kijk eens naar de code van Sibyl, die had dit probleem ook :+

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Wie of wat is Sibyl? :?

[ Voor 7% gewijzigd door _Thanatos_ op 14-03-2004 17:04 ]

日本!🎌


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Een ander truk om het effect te berijken wat je wilt is de parent van de window leeg te maken:
Delphi:
1
2
3
4
5
6
7
8
9
//In je form-declaratie, onder protected:
procedure CreateParams(var Params: TCreateParams); override;

//En de implmentatie:
procedure TDocumentForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := 0;
end;

Deze code heeft niet de bijwerkingen die je beschrijft, maar heeft wel weer andere. Een kant en klare oplossing is er niet. Je zal met nog meer code jouw gewenste situatie moeten berijken.

We adore chaos because we like to restore order - M.C. Escher


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Een combinatie van die ExStyle en ParentWnd oplossing geeft nog maar 1 bijwerking, voor zover ik kan zien: als je mainform minimized is en je child form is active, en je klikt op de knop van je mainform in de taakbalk, dan restored ie wel, maar wordt ie niet active.

Het window komt trouwens ook in de taskmanager, maar dat lijkt me wel weer normaal... toch?

日本!🎌


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dan zal je daar nog code voor moeten schrijven zodat ie wel active wordt. En ja, dat ie in de taskmanager verschijnt is normaal.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1