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
Verfügbare Bildschirmanzeige
Moderator: Moderatoren
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Verfügbare Bildschirmanzeige
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.
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
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12907
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Verfügbare Bildschirmanzeige
hi,
hier als Function zusammengefasst.
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
Jimmy
Re: Verfügbare Bildschirmanzeige
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
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
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Verfügbare Bildschirmanzeige
Hallo Wolfgang !
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.
Allgemein: https://msdn.microsoft.com/de-de/library/ms123401Woher kommt man denn an diese Info´s.
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
Hans-Peter
- Herbert
- 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
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...
Immer in Bewegung...