Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem mit ermittelten Werten: Width, Hight & Depth

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 04.07.2012, 23:16    Titel: Problem mit ermittelten Werten: Width, Hight & Depth Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 05.07.2012, 01:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 05.07.2012, 01:41    Titel: Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 05.07.2012, 08:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 05.07.2012, 15:00    Titel: Antworten mit Zitat

Mein unten gezeigter Code ermittelt dir die maximale Fenstergröße ohne dass was gestaucht wird und macht so ein Fenster auf.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz