 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 04.07.2012, 23:16 Titel: Problem mit ermittelten Werten: Width, Hight & Depth |
|
|
Ich lasse mir in einem Programm die Bildschirmgröße ermitteln und speichere sie in den Werten Width, Hight und Depth.
Es wird mit
Code: | SCREENRES width, hight, depth |
das Grafikfenster erstellt.
Im Programm sind an einer bestimmter Stelle im Bildschirm (X 120-140, Y 120-140) Buttons definiert.
Leider funktioniert ein Klick auf den Button nicht mehr weil durch die automatische Screeneinstellung die Bildschirmwerte(?) verändert sind.
Button reagiert jetzt nur noch bei (X 130-150, Y 130-150) zum Beispiel.
Kann man irgendwie den verschobenen Wert ermitteln? Also wo der Button nun korrekt geklickt werden kann?
Wie kann das sein, dass der Button nun auf andere Werte reagiert, wenn der Bildschirm größer wird?
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 05.07.2012, 01:33 Titel: |
|
|
seit wann hat freebasic fertige buttons Oo?
wenn du deine eigenen buttons erfunden hast, code snippets posten von dem code der die koordinaten-auswertung macht oder sowas. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 05.07.2012, 01:41 Titel: |
|
|
Ich nehme an, das Grafikfenster wird gestaucht weil es größer wäre als der Bildschirm (was Windows nicht erlaubt und daher das Fenster staucht) weil du vergisst, dass es einen Rahmen hat.
Dein Logikfehler ist dass du dir die Größe des Bildschirms ermitteln lässt und dann ein Grafikfenster öffenst, dessen INHALTSBEREICH genausogroß ist. Den Fensterrahmen vergisst du, dadurch würde das Fenster insgesamt größer als der Bildschirm, was Windows wie gesagt nicht zulässt.
Du musst entweder ein rahmenloses Fenster erstellen (entweder auf Fullscreen oder mit dem GFX_NO_FRAME Flag - siehe http://www.freebasic-portal.de/befehlsreferenz/screenres-372.html ) oder den Rahmen mit einberechnen. Dafür brauchst du die WinAPI-Funktion AdjustWindowRect:
Code: |
#Include "windows.bi"
' ...
Dim As Integer scr_width, scr_height, scr_depth
ScreenInfo scr_width, scr_height, scr_depth
Dim rc As RECT = (0, 0, 0, 0)
' Dieser Trick berechnet jetzt, wie groß die Größe (mit Rahmen) eines Fensters mit 0x0 Pixel Größe wäre. Dies können wir verwenden, um das ganze nachher umgekehrt auszurechnen.
AdjustWindowRect(@rc, WS_DLGFRAME Or WS_BORDER Or WS_VISIBLE Or WS_SYSMENU, FALSE)
scr_width -= rc.right - rc.left
scr_height -= rc.bottom - rc.top
ScreenRes scr_width, scr_height, scr_depth
|
Siehe auch:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd162729%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632665%28v=vs.85%29.aspx
mfG Cherry
PS: Ich vermute aber eher, dass du meinen ersten Vorschlag brauchst  |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 05.07.2012, 08:45 Titel: |
|
|
Zitat: | Zitat von MisterD:
seit wann hat freebasic fertige buttons Oo? |
Der Button ist von mir selber erstellt.
Zitat: | Zitat von Cherry:
Ich nehme an, das Grafikfenster wird gestaucht weil es größer wäre als der Bildschirm (was Windows nicht erlaubt und daher das Fenster staucht) weil du vergisst, dass es einen Rahmen hat. |
Das Fenster wird gestaucht. Deshalb sind ja auch die Koordinaten an der falschen Stelle. Ich kann nicht mehr an der geplanten Stelle auf den Button klicken. Andere Buttons sind korrekt anzuklicken. Es sind nur die Buttons die ganz unten liegen.
Edit: Mit dem GFX_NO_FRAME Flag funktioniert es schon mal. Die Titelleiste oben will ich schon haben. Man kann, wenn man das GFX_NO_FRAME Flag setzt das Fenster nicht mehr verschieben. Verschiebbar soll es schon sein. Wie ich das letztendlich mache weiß ich noch nicht. Wenn das Fenster gestaucht wird bei Rechnern die einen kleineren Bildschirm als mein Grafikfenster haben, dann wäre das super. Bei gewissen Rechnern von mir wird momentan das Fenster nicht komplett dargestellt, weil das Grafikfesnter zu groß ist.
Mit dem Flag müsste es auf jedem Rechner so funktionieren, wie ich es haben will. Erste Test bestätigen mir dies.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 05.07.2012, 15:00 Titel: |
|
|
Mein unten gezeigter Code ermittelt dir die maximale Fenstergröße ohne dass was gestaucht wird und macht so ein Fenster auf. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|