Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
oldirty
Anmeldungsdatum: 04.08.2005 Beiträge: 65
|
Verfasst am: 09.11.2005, 18:12 Titel: Window-Position verändern bzw. miminieren |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 09.11.2005, 20:07 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 09.11.2005, 22:04 Titel: |
|
|
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 |
|
|
oldirty
Anmeldungsdatum: 04.08.2005 Beiträge: 65
|
Verfasst am: 09.11.2005, 22:29 Titel: |
|
|
Vielen Dank,
funktioniert super.
Immer wieder toll, wie schnell man hier Hilfe bekommt.
CU
OlDirty |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 09.11.2005, 22:34 Titel: |
|
|
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 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, 23:30, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
oldirty
Anmeldungsdatum: 04.08.2005 Beiträge: 65
|
Verfasst am: 09.11.2005, 23:28 Titel: |
|
|
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, 23:46, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 09.11.2005, 23:39 Titel: |
|
|
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 |
|
|
oldirty
Anmeldungsdatum: 04.08.2005 Beiträge: 65
|
Verfasst am: 09.11.2005, 23:48 Titel: |
|
|
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 |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 10.11.2005, 09:55 Titel: |
|
|
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 |
|
|
oldirty
Anmeldungsdatum: 04.08.2005 Beiträge: 65
|
Verfasst am: 10.11.2005, 14:04 Titel: |
|
|
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 |
|
|
|