Verfügbare Bildschirmanzeige

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

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

Verfügbare Bildschirmanzeige

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Verfügbare Bildschirmanzeige

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Verfügbare Bildschirmanzeige

Beitrag 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
gruss by OHR
Jimmy
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: Verfügbare Bildschirmanzeige

Beitrag 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
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Verfügbare Bildschirmanzeige

Beitrag 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.
--
Hans-Peter
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Verfügbare Bildschirmanzeige

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