Seite 1 von 1

Verfügbare Bildschirmanzeige

Verfasst: Di, 29. Aug 2017 7:21
von saul
Hallo,
bei der Windows Bildschirmanzeige gibt es ja eine Taskleiste. Die Anzahl der Taskzeilen und die Größe der Symbole kann man einstellen. Damit verändert sich ja auch der dann verbleibende Anzeigebereich. Die Auflösung verändert die Größe dann ja auch noch mal.

Gibt es eine Möglichkeit die Größe von z. B. dem aktuell verbleibenden Anzeigebereich bei 3 Taskzeilen zu ermitteln?

mfg
Wolfgang

Re: Verfügbare Bildschirmanzeige

Verfasst: Di, 29. Aug 2017 9:26
von Tom
Hallo, Wolfgang.

SystemParametersInfoA(SPI_GETWORKAREA, 0, @cPuffer, SPIF_SENDCHANGE) ist Dein Freund.
SPI_GETWORKAREA ist 48, SPIF_SENDCHANGE ist Hex 0x0002, cPuffer sollte mit 16 Blanks vorbefüllt werden. Jeweils 4 Bytes der Pufferrückgabe sind x1, y1 (Startbereich der freien Workarea) und x2, y2 (Ende). Mit Bin2U(Substr(cPuffer,1,4)) bekommt man x1 usw. Die Differenzen aus x2 und x1 ergeben die verfügbare Breite, aus y2 und y1 die Höhe.

Re: Verfügbare Bildschirmanzeige

Verfasst: Di, 29. Aug 2017 17:51
von AUGE_OHR
hi,

hier als Function zusammengefasst.

Code: Alles auswählen

#define SPI_GETWORKAREA       48
#define SPIF_SENDWININICHANGE 0x0002
#define SPIF_SENDCHANGE       SPIF_SENDWININICHANGE

DLLFUNCTION SystemParametersInfoA( nAction, nParam1, @Param2, nWinIni ) ;
  USING STDCALL FROM USER32.DLL

FUNCTION DC_GetWorkArea()
LOCAL cBuffer := SPACE(16)
LOCAL aRet := ARRAY(4)

   SystemParametersInfoA( SPI_GETWORKAREA, 0, @cBuffer, SPIF_SENDCHANGE )
   aRet[1] := BIN2U( SUBSTR( cBuffer,  1,4 ))
   aRet[2] := BIN2U( SUBSTR( cBuffer,  5,4 ))
   aRet[3] := BIN2U( SUBSTR( cBuffer,  9,4 ))
   aRet[4] := BIN2U( SUBSTR( cBuffer, 13,4 ))
RETURN aRet

Re: Verfügbare Bildschirmanzeige

Verfasst: Fr, 01. Sep 2017 20:32
von saul
Hallo,
danke das hat geklappt. Woher kommt man denn an diese Info´s. In der Hilfe habe dazu nichts gefunden.
Geht das über xbase hinaus oder?

Wolfgang

Re: Verfügbare Bildschirmanzeige

Verfasst: Fr, 01. Sep 2017 21:09
von HaPe
Hallo Wolfgang !
Woher kommt man denn an diese Info´s.
Allgemein: https://msdn.microsoft.com/de-de/library/ms123401
Hier: https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Das Umsetzen in die jeweils verwendete Programmiersprache muss man sich dann noch dazu aneignen.

Re: Verfügbare Bildschirmanzeige

Verfasst: Mo, 04. Sep 2017 12:40
von Herbert
saul hat geschrieben: Di, 29. Aug 2017 7:21 Gibt es eine Möglichkeit die Größe von z. B. dem aktuell verbleibenden Anzeigebereich bei 3 Taskzeilen zu ermitteln?
Ich frage mich, warum du das tun solltest. Wenn jemand 3 Linien für die Taskleiste braucht, hat er
- eventuell viel zu viele Programme geöffnet
- höchstwahrscheinlich einen viel zu kleinen Bildschirm
- oder das Windows ungeschickt eingerichtet.

Die Startleiste kann bekanntlich verändert werden (Symbolgrösse, Position (links, oben oder rechts) oder was hier wohl mehr Sinn machen würde, automatisch ausblenden lassen).
Eventuell hilft ein zweiter Bildschirm.
Dein Programm scheint gerne den ganzen Bildschirm zu füllen, also sind oben beschriebene Massnahmen wohl geschickter - und sparen dir Aufwand, der zudem wegen der Dynamik der Startleiste wohl nie genau passen wird.