AGB  ·  Datenschutz  ·  Impressum  







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

Windows Message WMChildActivate

Ein Thema von Nuclear-Ping · begonnen am 19. Okt 2004 · letzter Beitrag vom 19. Okt 2004
Antwort Antwort
Nuclear-Ping
(Gast)

n/a Beiträge
 
#1

Windows Message WMChildActivate

  Alt 19. Okt 2004, 16:48
Ahoi USS DP!

Meine Anwendung ist ein MDI mit nur einer Child-Form, welche mehrfach instanziert werden kann.

Ich fange in dieser Child-Form die Message WM_CHILDACTIVATE ab, um in dieser verschiedene nötige Routinen durchführen zu lassen.

Soweit, sogut, solange es bei nur einer Instanz der Form bleibt.

Sobald aber eine weitere hinzukommt und angezeigt wird, bzw. ich zwischen den Childs wechsel, bombardiert Windows meine App mit WM_CHILDACTIVATE-Messages, was in diesem Fall dazu führt, dass sich das Wechseln zw. den Children unglaublich lange hinauszögert.

Code von der Message-Prozedur:
Delphi-Quellcode:
{ ************************************************************ }
procedure TPMainForm.WMChildActivate (var Msg: TWMChildActivate);
{ ************************************************************ }
var
  BT, ET: Cardinal;
begin
  inherited;

  AddToLog ('Message: #' + inttostr (Msg.Msg) + ' Result: ' + inttostr (Msg.Result));

  { ... }

  if Assigned (PQuickPlanetPhases) then
    begin
      BT := GetTickCount;
      PQuickPlanetPhases.UpdatePlanetPhases (NatalHoroscope,
                                             TransitHoroscope);
      ET := GetTickCount;
      AddToLog ('UpdatePlanetPhases: ' + inttostr (ET - BT) + ' Ticks');
    end;
end;
Log vom ersten Start des Programms bei einer Instanz:
Code:
Message: #34 Result: 0
UpdatePlanetPhases: 62 Ticks
Soweit ist alles im akzeptablen und grünen Bereich.

Wenn ich nun jedoch eine zweite Instanz erzeuge bzw. zwischen den Children hin- und her-schalte dauert der Vorgang auf meinem Rechner hier (AMD 2100+, 512MB, WinXP Prof) ca. 3sek, auf einem anderen Rechner (Notebook, eigentlich P4 (k.a. welcher Prozi), Win98, k.a. wieviel RAM) vlt. 1-2min (ich hab echt davor gesessen und gewartet)!

Der Log sieht bei mir dann wie folgt aus:
Code:
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
Message: #34 Result: 0
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 32 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 63 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 63 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 62 Ticks
UpdatePlanetPhases: 32 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 32 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 46 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 47 Ticks
UpdatePlanetPhases: 31 Ticks
UpdatePlanetPhases: 63 Ticks
Message: #34 Result: 0
UpdatePlanetPhases: 47 Ticks
Also er kriegt zig mal die Message und arbeitet ebenfalls zig mal die Routinen dadrin ab, was entsprechend dauert ...

Hat jemand eine Idee, warum das so ist und wie man das lösen kann? Das sind einfach unakzeptable Werte und Ergebnisse und ich hab keine Ahnung, warum und woher die kommen ...

Bin für jegliche Tips und Hilfen wie immer sehr dankbar!

Grüße,
Mario
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#2

Re: Windows Message WMChildActivate

  Alt 19. Okt 2004, 17:12
OK, ein Lösungsansatz wäre, sowas wie eine "Ampel-Schaltung" da rein zu machen.

Also eine Bool'sche Variable für die Child-Form herzunehmen und die beim FormCreate der Child-Form auf FALSE zu setzen.

Kommt nun ein WM_CHILDACTIVATE, wird die Variable dieser Instanz auf TRUE gesetzt und die aller anderen Instanzen auf FALSE. In der Message-Prozedur wird nun geprüft, ob diese Variable auf TRUE ist, wenn ja, Exit, wenn nein auf TRUE setzen und die aller anderen Instanzen auf FALSE.

Umgesetzt hab ich's schon, das funktioniert auch ohne Probleme. Aber mich würde es jetzt trotzdem noch interessieren, ob es da was "saubereres" gibt?

Grüße,
Mario
  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 14:08 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