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:

Window-Position verändern bzw. miminieren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 09.11.2005, 17:12    Titel: Window-Position verändern bzw. miminieren Antworten mit Zitat

Hallo,

besteht die Möglichkeit, bei einem mit Screen erzeugten Fenster (z. B. über APIs) die Position zu verändern?. Sind ja immer zentriert.

Mit der Api Findwindow kann ich den Handle (?) nicht finden. Mit Windowtitel "Test" müsse doch der Name Test sein, oder?

Besteht die Möglichkeit, das Fenster auch zu minimieren und wieder hervorzubringen?

Danke schonmal im Vorraus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 09.11.2005, 19:07    Titel: Antworten mit Zitat

Sobald du die Handle(hwnd) des Fensters hast, kannst du per WINApi fast alles damit machen. Ich habe bis jetzt auch noch keine gute Lösung gefunden.

Ich habe mal gelesen, dass es eine funktion gibt, mit der man das hwnd des fensters "holen" kann, wenn die maus darauf zeigt. Das müsste dann kein Problem sein. Getestet habe ich das noch nicht. Ich suchs mal raus.

Ich verstehe aber auch nicht, wieso das nicht da einfach in freebasic eingebaut wird, da das ja auf jeden fall ein hwnd zugewiesen bekommt.


Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 09.11.2005, 21:04    Titel: Antworten mit Zitat

Ich habs jetzt.

Habe einfach mal im englischem Forum nachgeguckt und dazu den code geschrieben:

Code:

#Include "win\user32.bi"

Screen 13

Dim As Integer hwnd

WindowTitle "123456789"

hwnd =  FindWindow( 0, "123456789" )
sleep 1000
ShowWindow ByVal hwnd, SE_HIDE
sleep 3000
ShowWindow hwnd, SW_RESTORE

for i= 1 to 20
    SetWindowPos hwnd, 0&, rnd*1024, rnd*768, 0&, 0&, SWP_NOSIZE
    sleep 1000
next i
sleep

_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 09.11.2005, 21:29    Titel: Antworten mit Zitat

Vielen Dank,

funktioniert super.

Immer wieder toll, wie schnell man hier Hilfe bekommt.

CU

OlDirty
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 09.11.2005, 21:34    Titel: Antworten mit Zitat

Hi.
wenn du nicht über den WindowTitel das Handle ermitteln willst, kann man die Infos aus der GfxLib holen.
Hier die Version für 0.15 -test- :

Code:
'In der FB-Version 0.15b test werden so alle nötigen Windows-DLL deklariert.
#INCLUDE "windows.bi"

' Definitionen und Typs für den Win32Driver der internen GfxLib von FB
#define WINDOW_TITLE_SIZE   128
#define WINDOW_CLASS_PREFIX "fbgfxclass_"
Type WIN32DRIVER
    Version             As Integer
    hInstance           As HINSTANCE
    WndClass            As WNDCLASS
    Wnd                 As HWND   
    Palette(0 To 255)   As PaletteEntry
    Blitter             As Sub(ByVal As uByte Ptr, ByVal As Integer)
    Is_Running          As Integer
    Is_Palette_Changed  As Integer
    Is_Active           As Integer
    w                   As Integer
    h                   As Integer
    Depth               As Integer
    FullScreen          As Integer
    Refresh_Rate        As Integer
    Window_Title        As uByte Ptr
    WindowClass(0 To WINDOW_TITLE_SIZE + Len(WINDOW_CLASS_PREFIX)-1) As uByte
    Init As Function()  As Integer
    Exit As Function()  As Integer
    Paint As Function() As Integer
    Thread              As Sub(ByVal Running_Event As HANDLE)
End Type
'Die Infos aus der GfxLib holen
Extern FB_Win32 Alias "fb_win32" As WIN32DRIVER
'Damit habe ich die Möglichkeit mein Fenster zu kontrollieren

hier 0.14 Version:
Code:
#define WINDOW_TITLE_SIZE   128
#define WINDOW_CLASS_PREFIX "fbgfxclass_"

Type WIN32DRIVER
    Version             As Integer
    hInstance           As uInteger
    WndClass            As WNDCLASS
    Wnd                 As uInteger   
    Palette(0 To 255)   As uInteger
    Blitter             As Sub(ByVal As uByte Ptr, ByVal As Integer)
    Is_Running          As Integer
    Is_Palette_Changed  As Integer
    Is_Active           As Integer
    w                   As Integer
    h                   As Integer
    Depth               As Integer
    FullScreen          As Integer
    Refresh_Rate        As Integer
    Window_Title        As uByte Ptr
    WindowClass(0 To WINDOW_TITLE_SIZE + Len(WINDOW_CLASS_PREFIX)-1) As uByte
    Init As Function()  As Integer
    Exit As Function()  As Integer
    Paint As Function() As Integer
    Thread              As Sub(ByVal Running_Event As uInteger)
End Type

Extern FB_Win32 Alias "fb_win32" As WIN32DRIVER


Handle ist hier
Code:
FB_Win32.Wnd
lassen sich auch noch andere tolle Sachen machen (Menues etc..)
Gruß
Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 09.11.2005, 22:30, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 09.11.2005, 22:28    Titel: Antworten mit Zitat

Hallo volta,

mit deinem Code:

Code:

'In der FB-Version 0.15b test werden so alle nötigen Windows-DLL deklariert.
#INCLUDE "windows.bi"

' Definitionen und Typs für den Win32Driver der internen GfxLib von FB
#define WINDOW_TITLE_SIZE   128
#define WINDOW_CLASS_PREFIX "fbgfxclass_"
Type WIN32DRIVER
    Version             As Integer
    hInstance           As HINSTANCE
    WndClass            As WNDCLASS
    Wnd                 As HWND   
    Palette(0 To 255)   As PaletteEntry
    Blitter             As Sub(ByVal As uByte Ptr, ByVal As Integer)
    Is_Running          As Integer
    Is_Palette_Changed  As Integer
    Is_Active           As Integer
    w                   As Integer
    h                   As Integer
    Depth               As Integer
    FullScreen          As Integer
    Refresh_Rate        As Integer
    Window_Title        As uByte Ptr
    WindowClass(0 To WINDOW_TITLE_SIZE + Len(WINDOW_CLASS_PREFIX)-1) As uByte
    Init As Function()  As Integer
    Exit As Function()  As Integer
    Paint As Function() As Integer
    Thread              As Sub(ByVal Running_Event As HANDLE)
End Type
'Die Infos aus der GfxLib holen
Extern FB_Win32 Alias "fb_win32" As WIN32DRIVER
'Damit habe ich die Möglichkeit mein Fenster zu kontrollieren

screen 14
windowtitle "1234"

print FB_Win32.Wnd
sleep


Von mir nur das Ende etwas abgewandelt zum Anzeigen des Handle gekommen ich in der Zeile
Code:

    WindowClass(0 To WINDOW_TITLE_SIZE + Len(WINDOW_CLASS_PREFIX)-1) As uByte


den Fehler: Expected constant, found: ')' in der FBIDE mit Hinweis auf die letzte Klammer.

Wenn ich diese Zeile auskommentiere, funktioniert es einwandfrei mit der Version 0.15 Test.

Danke.

@programmierer:
Danke für die Hilfe. Hatte zwar schon per Api-Guide die Funktion FindWindow gefunden, diese aber mit Findwindow("1234", "") wie aus dem Tutorial "Verstecken des Startbuttons" angesprochen und daher keinen Handle bekommen.

Tipp: mit
Code:

Dim as any ptr hwnd


funktioniert es besser. Keine Fehlermeldungen in der FBIDE


Zuletzt bearbeitet von oldirty am 09.11.2005, 22:46, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 09.11.2005, 22:39    Titel: Antworten mit Zitat

Mmm,
muss an FBIDE liegen?
Mit dem BE hab ich kein Problem mit der Zeile.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 09.11.2005, 22:48    Titel: Antworten mit Zitat

Hallo volta,

habe den Code abgeändert:
Code:

'In der FB-Version 0.15b test werden so alle nötigen Windows-DLL deklariert.
#INCLUDE "windows.bi"

' Definitionen und Typs für den Win32Driver der internen GfxLib von FB
#define WINDOW_TITLE_SIZE   128
#define WINDOW_CLASS_PREFIX "fbgfxclass_"
const WinClassLen = (128+len(fbgfxclass_)-1)
Type WIN32DRIVER
    Version             As Integer
    hInstance           As HINSTANCE
    WndClass            As WNDCLASS
    Wnd                 As HWND   
    Palette(0 To 255)   As PaletteEntry
    Blitter             As Sub(ByVal As uByte Ptr, ByVal As Integer)
    Is_Running          As Integer
    Is_Palette_Changed  As Integer
    Is_Active           As Integer
    w                   As Integer
    h                   As Integer
    Depth               As Integer
    FullScreen          As Integer
    Refresh_Rate        As Integer
    Window_Title        As uByte Ptr
    'WindowClass(0 To WINDOW_TITLE_SIZE + Len(WINDOW_CLASS_PREFIX)-1)) As uByte
    WindowClass(WinClassLen) As uByte
    Init As Function()  As Integer
    Exit As Function()  As Integer
    Paint As Function() As Integer
    Thread              As Sub(ByVal Running_Event As HANDLE)
End Type
'Die Infos aus der GfxLib holen
Extern FB_Win32 Alias "fb_win32" As WIN32DRIVER
'Damit habe ich die Möglichkeit mein Fenster zu kontrollieren

und somit als Constante WinClassLen übergeben. Dann geht es genausogut.

Danke.

Kann ich den Maximier-Button verschwinden lassen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 10.11.2005, 08:55    Titel: Antworten mit Zitat

Hi,
da die Gfxlib die WindowClass schon registriert hat wohl nicht?
Aber man kann den Event abfragen und die Maximierung stoppen,
dazu muss man aber tiefer in die Gfxlib eintauchen als ich das gemacht habe.

PS. auch mit FBIDE 043 wird die Zeile oben nicht beanstandet?

Gruß
Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
oldirty



Anmeldungsdatum: 04.08.2005
Beiträge: 65

BeitragVerfasst am: 10.11.2005, 13:04    Titel: Antworten mit Zitat

Nutze FBIDE 0.4.3 und FB 15b vom 31.10.05.

Geht leider nicht, ohne dass ich WindowClass die oben im Code übergebene Konstante zuweise.

Trotzdem Danke.

CU
OlDirty
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken 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