AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignis OnAfterShow

Ein Thema von Eurowig · begonnen am 10. Mär 2009 · letzter Beitrag vom 10. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Eurowig
(Gast)

n/a Beiträge
 
#1

Ereignis OnAfterShow

  Alt 10. Mär 2009, 10:31
Hi.
Eigentlich ein simples Problem.
Ein Form bekommt zur Designzeit das Propertie WindowsState = wsMaximized zugewiesen. Ich will die Größe meiner Form nach dem es das erste mal sichtbar wurde wissen.

Aber wie kann ich Height und Width des Forms rausfinden. In OnShow bekomme ich die alten Werte (also die Größe zur Designzeit). Wenn man in die Delphi Sourcen schaut, wird auch klar warum. Das Ereignis OnShow wird vor dem Zuweisen von WindowState gesendet.

Bisher meine Lösung, im OnResize einen Zähler abfragen:
Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
begin
  if ResizeCounter = 2 then // OnReszie wird beim ersten anzeigen 2-mal ausgelöst
  begin
    ... // Tu was, z.B. Controls anordnen
  end;

  Inc(ResizeCounter);
end;
Leider haben die Delphientwickler ein 'OnAfterShow' vergessen.
Gibt es da eine schönere Lösung?

thx
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 10:41
.. eine eigene WM_AfterShow definieren und mit PostMessage() im OnShow senden
Ralph
  Mit Zitat antworten Zitat
Eurowig
(Gast)

n/a Beiträge
 
#3

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 10:52
und was soll das bringen???
Im OnShow geht doch nicht (siehe mein erster Beitrag)
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 10:55
Das Einzige was mir noch einfallen würde wäre ein Timer, den man im onShow startet.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 10:56
Schlagt mich für die seltsame VAriante, aber ich mache das immer so:
Delphi-Quellcode:
// FirstRun ist eine Bool-Variable im private des Formular

procedure TForm1.FormCreate(Sender: TObject);
begin
  FirstRun := True;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  if FirstRun then begin
    FirstRun := False;
    // Fenster Größe setzen
    WindowState := wsMaximized;
    Application.ProcessMessages;
    // einmaliges Initialisieren der Controls
    Label1.Caption := IntToStr(Width)+'x'+IntToStr(Height);
  end;
end;
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 10:59
Zitat:
und was soll das bringen???
... den von dir gewünschten Effekt
Ralph
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 11:06
Zitat von taaktaak:
Zitat:
und was soll das bringen???
... den von dir gewünschten Effekt
Wenn laut ihm WindowState erst nach dem onShow gesetzt wird, wird das Auslösen eines neuen Events im onShow auch nicht's nutzen Das müsste er schon nach dem Setzen des WindowStates auslösen. Allerdings müsste er dafür in die Form Klasse und hätte somit keine releasesichere VCL mehr, wenn ich jetzt nicht arg aufm Schlauch steh.
  Mit Zitat antworten Zitat
Eurowig
(Gast)

n/a Beiträge
 
#8

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 11:11
@taaktaak:
Sorry, du hast vielleicht sogar recht.

Die Message reiht sich im Windows Messagehandler 'hinten' an. Somit hat dann das Form wenn diese Message verarbeitet wird seine endgültige Größe. Wichtig ist hier wohl nur, dass das PostMessage() ganz am Ende von OnShow stattfindet und das Form schneller gezeichnet wird als die Message dran ist.

@mquadrat:
Ein Timer ist unter Umständen genauso problematisch. Dann bleich ich lieber bei meiner 'ResizeCount' Variante.
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#9

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 11:13
Zitat von mquadrat:
Wenn laut ihm WindowState erst nach dem onShow gesetzt wird, wird das Auslösen eines neuen Events im onShow auch nicht's ...
Hat ja auch niemand was von einem "neuen Event" geschrieben sondern vom "Senden einer Message" und damit geht das dann sehr wohl, da die MessageQueue erst abgearbeitet wird, wenn das setzen von WindowState auch schon rum ist.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#10

Re: Ereignis OnAfterShow

  Alt 10. Mär 2009, 11:15
Also, ich mache das in verschiedenen Projekten auf diese Weise,
bisher hat es immer funktioniert.
- probiere es mal aus!
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:58 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