WinFuture-Forum.de: Fensterpositionierung unter Windows 7 - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Fensterpositionierung unter Windows 7 Festlegung der TOpenDialog Position


#1 Mitglied ist offline   epwf 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 30. Januar 09
  • Reputation: 0

geschrieben 03. Juli 2011 - 12:28

Hi Leute,

ich habe ein Problem, ein selbstgeschriebenes Programm auf Windows 7 anzupassen.

Mit viel Mühe hatte ich es geschafft, die Positionierung des TOpenDialogs so hinzubekommen, dass er am Monitor auch dort erscheint, wo ich ihn haben will. Dazu brauchte es eine abgeleitete Komponente von TOpenDialog, in der ich WM_NOTIFY abfing und mittels SetWindowPlacement die Position festlegte.

Mit W7 geht das nicht mehr. Ich sehe zwar den Dialog ganz kurz an der gewünschten Position aufblitzen, danach springt er aber gleich an die Position zurück, die zuletzt gültig war. Ich schaffe es derzeit nicht, die Eigenschaft von W7 zu umgehen, welche sich die alte Fensterposition merkt.

Ich habe bereits nachgeschaut, ob zwischen meiner Positionierung und der Repositionierung durch W7 noch weitere Messages existieren, welche man vielleicht abfangen müsste. Da gibt es aber nur noch ein WM_UPDATEUISTATE, wenn ich es richtig verstehe, kann es das nicht sein.

Da der OpenDialog ein modaler Fensteraufruf ist, wüsste ich nicht, wie ich nochmals eine andere Positionierung dazwischen schieben soll. Die Repositionierung durch W7 findet jedenfalls nach CDN_INITDONE statt. Wie kann ich danach überhaupt noch darauf reagieren?

Besteht vielleicht die Möglichkeit, W7 mitzuteilen, bei welchen Programmen die automatische Fensterwiederherstellung an der selben Position ausgeschaltet sein soll?

epwf

P.S.: Ich arbeite noch mit der alten Borland C++ Builder Version 5
0

Anzeige



#2 Mitglied ist offline   UweKeim 

  • Gruppe: aktive Mitglieder
  • Beiträge: 25
  • Beigetreten: 08. Juli 11
  • Reputation: 1
  • Geschlecht:Männlich
  • Wohnort:Göppingen
  • Interessen:Software-Entwickeln ;-)

geschrieben 08. Juli 2011 - 19:12

Die Funktion "SetWindowsPlacement" hat einen Rückggabewert:

http://msdn.microsof.../ms...4(v=vs.85).aspx

Details bei einem Fehler kannst Du mit GetLastError() aufrufen.

Hast Du das schon gemacht und kannst hier posten, was die Funktion Dir als Fehler gemeldet hat?

Dann sollte Hilfe ganz nah sein :imao:
0

#3 Mitglied ist offline   epwf 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 30. Januar 09
  • Reputation: 0

geschrieben 08. Juli 2011 - 20:49

Danke für die Antwort!
Ich habe das Problem zwischenzeitlich wie folgt gelöst:
Vor OpenDialog->Execute starte ich einen Timer, welcher die Position abgleicht. Falls die Position noch nicht wie gewünscht vorliegt, wird sie mit SetWindowPlacement zurecht gebogen.

Wenn man ganz genau hinsieht, erkennt man jetzt beim OpenDialog-Aufruf zunächst den "Original"-OpenDialog in der Standardgröße, danach springt sie zur W7-Position in der aktuellen W7-Größe und durch die OnTimer-Routine (mit erneutem Placement) wieder zurück auf die gewünschte Position.

Ich vermute, die Auswertung der SetWindowPlacement-Rückmeldung etc. hätte mir gar nichts gebracht, weil mir W7 nachträglich eine Positionsänderung drübergelegt hat.

epwf
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0