Term2x Screen location

  • 1
  • 2
  • Page 2 of 2
Avra
Schreiberling
Avatar
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Term2x Screen location

 · 
Posted: 16.12.2010 - 13:23  ·  #9
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Term2x Screen location

 · 
Posted: 16.12.2010 - 18:11  ·  #10
@all,

with Delphi I have two values to be considered

tScreen.DesktopLeft (top)
tScreen.WorkAreaLeft (top)

Which one is the right one?
I don't have any idea because I don't have a dual screen...

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Term2x Screen location

 · 
Posted: 16.12.2010 - 22:19  ·  #11
Hallo Rolf.
Quote by rh

with Delphi I have two values to be considered

tScreen.DesktopLeft (top)
tScreen.WorkAreaLeft (top)

Which one is the right one?
I don't have any idea because I don't have a dual screen...


Irgendwie hatten wir dieses Thema doch schon mal :)

Ich habe gerade mal schnell ein kleines Tool geschrieben (natürlich in Delphi), das die beiden Werte
anzeigt. Da ich normalerweise immer mit einem 2fach oder 3fach Screen arbeite bin ich schon sehr oft über diese Probleme gestoßen.

Das Tool zeigt euch an wie euer System den Dual-Screen verwaltet, das ist nicht immer gleich!!!
Wenn XP den DUAL-Screen steuert, gibt der Screen.Desktop... die komplette Breite an....

Sprich bei einem Desktop mit 2x Monitor a 768x1024 erhälst Du bei Deskstop:

768 x 2048 (eben den kompletten Bereich, also sollte man dann auch den "Left-Wert" von dem Screen.DesktopLeft nehmen! Bei 3 x Monitor a 768 x 1024 hast Du dann schon 3072 pixel.

Dagegen ist die "Workarea" eben egal ob 1, 2 oder 3 Monitore immer nur 768x1024!
Es sei denn Du hast wie ich eine Schnellstartleiste von 45pixel links angedockt, das wird dann bei dem
Wert im Workarea abgezogen, aber nicht bei dem Desktop-Werten, diese sind immer für alle Monitore auf dem Desktop!

Aber jetzt kommt noch was ganz gemeines :( In einer Terminalsession und bei vielen Grafikkartentreibern, steuert der Treiber das selbst ;) Dann ist die Workarea (abzügl. der Schnellstartleisten usw.) immer genauso breit wie der Desktopwert!

Kann man einfach austesten mit dem Tool von mir oder man merkt es schon beim Doppelklick auf dem oberen Fensterrahmen. Vergrößert er nur das Fenster auf den aktiven Monitor, dann steuert meist Windows das Dual-System, springt er mit dem Fenster über alle Monitore ist es eine Terminalsession (RDP) oder der Grafikkartentreiber steuert den Screen.

Ich hoffe ich hab da ein bissle Licht ins Dunkle gebracht, ich vertausche das auch immer wieder ;)

Sorry, das ich es nicht ins Englische übersetzt habe (hatte keine Zeit dazu).

Gruß
Thorsten
Attachments
ScreenDataAnsicht
Filename: PVS_ScreenData.JPG
Filesize: 25.08 KB
Title: ScreenDataAnsicht
Information: ScreenDataAnsicht
Download counter: 114
Filename: PVS_ScreenData.zip
Filesize: 627.79 KB
Title: AnzeigeTool
Information: AnzeigeTool
Download counter: 49
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Term2x Screen location

 · 
Posted: 16.12.2010 - 22:50  ·  #12
Hallo Thorsten,

das hiesse für Rolf:
sind die in der Term2x.ini eingetragene Xpos oder Ypos grösser als die Werte
von Workarea, sollten die Positionen in der .ini auf 0/0 geändert werden?
Da es nur um den Wechsel von Multiple- auf Single Screen geht, sind diese
"Treiber Spezialfälle" eigentlich aussen vor?

Gruß
Gunter
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Term2x Screen location

 · 
Posted: 17.12.2010 - 10:10  ·  #13
Hallo Gunter :)
Quote by Gunter

das hiesse für Rolf:
sind die in der Term2x.ini eingetragene Xpos oder Ypos grösser als die Werte
von Workarea, sollten die Positionen in der .ini auf 0/0 geändert werden?
Da es nur um den Wechsel von Multiple- auf Single Screen geht, sind diese
"Treiber Spezialfälle" eigentlich aussen vor?


Also eigentlich ist der "Screen.Desktop..." das Richtige, wenn er den WorkArea-Bereich nimmt, wird er NIE die Position vom 2. und 3. ... Monitor Speichern und nutzen können.

Ich mache das ganze immer in etwa so (mal schnell getippt ist ungetestet ;) ):

Code

If (Screen.DesktopWidth < (GespeichertFensterDesktopLeft + Fenster.Width) ) then
 begin
   Fenster.Left := 0;
 end; 


Das selbe natürlich auch mit dem Fenster.Top, wichtig er muss den Fenster.Left /.Top im Bezug auf dem Screen.Desktop benutzen und diesen auch speichern.

Wenn er Form.Left und Form.Top benutzt, ist das immer im Bezug auf den Desktop, NIE vom Workarea.Wenn bei einem Dualmonitor-System das Term auf den 2. Monitor ist, ist der Form.Left immer größer als der Screen.WorkAreaWidth Bereich.
Wenn er nun mit dem Workarea vergleichen würde, mit gespeicherten Form.Left in der INI, dann würde er immer wieder auf 0 setzen und das Term-Fenster würde im 1. Monitor stehen.
Aber NIE im 2. und das ist natürlich für Dualmonitor-Benutzer (wie ich) schlecht :D

Richtig MIES ist das ganze wenn die Monitore unterschiedliche Auflösungen haben, dann gibt es nämlich verdeckte Virtuelle-Bereiche, dabei kann man sich ganz schön beim programmieren die Finger brechen bis das läuft, aber das sollte wirklich nur die Ausnahme sein ;) und ist nicht die Regel.

Rolf muss sich eigentlich nur nach dem Screen.Desktop richten, damit hat er dann 99% aller Fälle erschlagen, außerdem hat er somit auch die Teile im RDP und Grafikkarten-Treiber erschlagen.

Gruß
Thorsten
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Term2x Screen location

 · 
Posted: 17.12.2010 - 15:31  ·  #14
Hallo Thorsten.

mir sind die Zusammenhänge im grossen und ganzen schon klar. Ich scheue mich aber Term2x zu ändern, ohne dass ich (mangels 2.Monitor) das nicht testen kann. Im schlimmsten Fall tut das ganze bei Dual Screens nicht mehr. Hier mein init code:
Code
procedure TTermMain.LoadSession;
var
  idx, x, y : integer;
  st        : string;
begin
  ...
  x:= IniEditor.ReadInt(Session, 'PosX', -1);
  y:= IniEditor.ReadInt(Session, 'PosY', -1);
// <<<< hier müsste jetzt das TScreen Geraffel Desktop/Workspace rein
  if (x > 0) and (y > 0) then begin         
    Top:= y;
    left:= x;
  end;
  ... 

Für eine funktionierende Hilfe wäre ich sehr dankbar.

Weiterhelfen würden auch die x/y Positionen im INI-File wenn das Terminal auf dem 2. Screen war.

rolf
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1408
Registered: 03 / 2005
Subject:

Re: Term2x Screen location

 · 
Posted: 17.12.2010 - 16:11  ·  #15
Hi Rolf.

The application has a variable called Screen, which has several properties that help.

The 'bees knees' would to store several PosX and PosY values, based on the variable Screen.MonitorCount, which would then adapt dynamically to Neil's situation, with the current defaults being used for the case when Screen.MonitorCount = 1, and extra values for other cases initialy copying these values, eg.

Code
  ...

  iCount := Screen.MonitorCount;
  x := IniEditor.ReadInt( Session, 'PosX', -1 );
  ...
  if iCount > 1 then begin
     x := IniEditor.ReadInt( Session, 'PosX' + IntToStr( iCount ), x );
  ...
  end;



Hope this helps.

regards

Merlin


Merlin.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Term2x Screen location

 · 
Posted: 18.12.2010 - 22:14  ·  #16
@all,

I tried to support dual screen. New Term2x in the next update.

rolf
  • 1
  • 2
  • Page 2 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   133   148 · Page-Gen-Time: 0.031435s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI