AGB  ·  Datenschutz  ·  Impressum  







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

Top und Left vom Formular -> Minuswerte

Ein Thema von tofse · begonnen am 30. Jan 2012 · letzter Beitrag vom 31. Jan 2012
Antwort Antwort
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#1

Top und Left vom Formular -> Minuswerte

  Alt 30. Jan 2012, 15:05
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#2

AW: Top und Left vom Formular -> Minuswerte

  Alt 30. Jan 2012, 15:08
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Top und Left vom Formular -> Minuswerte

  Alt 30. Jan 2012, 17:14
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Top und Left vom Formular -> Minuswerte

  Alt 30. Jan 2012, 21:47
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".
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Top und Left vom Formular -> Minuswerte

  Alt 31. Jan 2012, 09:58
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;

Geändert von Meta777 (31. Jan 2012 um 10:01 Uhr)
  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 13:38 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