Verfügbare Bildschirmanzeige

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 244
Registriert: So, 26. Mär 2006 12:23

Verfügbare Bildschirmanzeige

Beitrag von saul » Di, 29. Aug 2017 7:21

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

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7284
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Verfügbare Bildschirmanzeige

Beitrag von Tom » Di, 29. Aug 2017 9:26

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.
Herzlich,
Tom

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11417
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Verfügbare Bildschirmanzeige

Beitrag von AUGE_OHR » Di, 29. Aug 2017 17:51

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
gruss by OHR
Jimmy

saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 244
Registriert: So, 26. Mär 2006 12:23

Re: Verfügbare Bildschirmanzeige

Beitrag von saul » Fr, 01. Sep 2017 20:32

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

Benutzeravatar
HaPe
Foren-Moderator
Foren-Moderator
Beiträge: 529
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz

Re: Verfügbare Bildschirmanzeige

Beitrag von HaPe » Fr, 01. Sep 2017 21:09

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.
--
Hans-Peter

Organisator der XUG Stuttgart
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1909
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Verfügbare Bildschirmanzeige

Beitrag von Herbert » Mo, 04. Sep 2017 12:40

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.
Grüsse Herbert
Immer in Bewegung...

Antworten