Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Top und Left vom Formular -> Minuswerte (https://www.delphipraxis.net/166109-top-und-left-vom-formular-minuswerte.html)

tofse 30. Jan 2012 15:05

Top und Left vom Formular -> Minuswerte
 
Hallo,

ich verwende ein Formular ohne Rahmen (bsNone) um sehr große Bilder in Originalgröße darzustellen (größer als Monitor).
Um sich alle Bereiche der Bilder anschauen zu können, kann man das Formular schieben, realisiert mit
Code:
ReleaseCapture;
Form1.Perform(WM_SysCommand, $F012, 0);
Das Problem ist nun, dass das Formular nach dem Loslassen der Maustaste wieder zurückspringt, also top:=0.
Wie kann ich das Formular an der "hingeschobenen" Position lassen, auch wenn top einen negativen Wert ergibt?

Danke
Christof

himitsu 30. Jan 2012 15:08

AW: Top und Left vom Formular -> Minuswerte
 
Ein Formular größer als der Bildschirm Desktop (nur ein Bildshirm angeschlossen) ... geht das überhaupt?
Mir war so, als wenn Fenster maximal so groß wie der Desktop sein können.

Das Fenster an seiner Position lassen und nur das Bild im Fenster verschieben. Eventuell mit einer ScrollBox.

Sir Rufo 30. Jan 2012 17:14

AW: Top und Left vom Formular -> Minuswerte
 
Jedes Fenster (allerdings mit Rahmen) hat bei Top und Left negative Werte (und zwar genau die Rahmenbreite).

Auch ein normales Fenster kann man ja ganz rechts in der Titelleiste anfassen und dann soweit die Maus es trägt nach links schieben. Der Left-Wert hat nun auch einen negativen Wert ;)

Medium 30. Jan 2012 21:47

AW: Top und Left vom Formular -> Minuswerte
 
Spätestens seit Vista "snapped" Windows aber die Fenster in den sichtbaren Bereich (+/- Rahmenbreite), allerdings auch nur oben. Zieht man ein Fenster an seiner Titelleiste an den oberen Rand, wird es zudem maximiert.
Insgesamt ist der Ansatz aber schon eher ungünstig, und ein Umbau auf Umherschieben einer TImage-Komponente auf einem maximierten Formular mit bsNone nicht nur Funktionswiederherstellend, sondern auch erheblich "sauberer".

Meta777 31. Jan 2012 09:58

AW: Top und Left vom Formular -> Minuswerte
 
Zitat:

Zitat von Medium (Beitrag 1148403)
Spätestens seit Vista "snapped" Windows aber die Fenster in den sichtbaren Bereich (+/- Rahmenbreite)...

Stimmt, und unsauber ist es auch - ABER man kann das ganze umgehen in dem man die WMGetMinMaxInfo abfängt.
Der folgende Code ermöglicht, dass das Formular größer sein kann als der Desktop. Zudem gibt es noch "MinTrackSize" in der Message (für Verschiebungen im negativen Bereich?).
Delphi-Quellcode:
  TMyForm = class(TForm)
  private
    procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
  end;

implementation

procedure TPmDiscLayouterVCLForm.WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo);
begin
  //2011.03.17 MET: need to override the Windows-Vista/7 max size constraints...
  AMsg.MinMaxInfo.ptMaxSize.X := 40000;
  AMsg.MinMaxInfo.ptMaxSize.Y := 40000;
  AMsg.MinMaxInfo.ptMaxTrackSize.X := 40000;
  AMsg.MinMaxInfo.ptMaxTrackSize.Y := 40000;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 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