window tonen/verbergen

Alles over het toepassen van API en DLL's in Liberty BASIC

Moderator: anthonio

window tonen/verbergen

Berichtdoor anthonio » za aug 04, 2007 1:41 pm

Alweer een nieuwe API call.
Zeer handige API waar je relatief veel mee kan doen.

Code: Selecteer alles
sub showWindow hwnd,nCmdShow
    calldll #user32, "ShowWindow",_
        hwnd as Long,_
        nCmdShow as Long,_
        ret as Long
end sub


nu om de code op te roepen

Code: Selecteer alles

open "xxx" for window as #1
h1 = hwnd(#1)
call showWindow h1, 0


even wat uitleg bij de call.
call = dient om de sub op te roepen
showWindow = de sub die we gedefineerd hebben
handle = the handle van ons window (in ons geval heb ik dit h1 genoemd)
getal = deze getallen dienen om de API duidelijk te maken wat deze moet doen.
Deze getallen kunnen zijn:

0 = window verbergen
1 = window maximalizeren
2 = window minimalizeren
3 = window restoren
4 = window tonen
5 = window default
6 = window activeren en maximalizeren
7 = window default
8 = window activeren en minimalizeren
9 = window minimalizeren en window blijft actief
10 = window tonen in zijn originele staat
11 = window tonen in zijn meest recente staat
12 = window restoren in zijn normale staat

Heel ingewikkeld al die codes dus probeer zelf uit wat het verschil is. Soms is dit niet altijd duidelijk.

voorbeeld van het gebruik van deze code.

Code: Selecteer alles
nomainwin

WindowWidth = 500
WindowHeight = 300

UpperLeftX=int((DisplayWidth-WindowWidth)/2)
UpperLeftY=int((DisplayHeight-WindowHeight)/2)

statictext #1, "window zal sluiten in 5sec en terug openen in 5sec.", 2, 2, 400, 30
open "ShowWindow" for window as #main
#main, "trapclose [Quit]"
h1 = hwnd(#main)
call delay 5000
call showWindow h1, 0
call delay 5000
call showWindow h1, 4
wait

[Quit]
close #main
end

sub showWindow hwnd, nCmdShow
    calldll #user32, "ShowWindow", _
        hwnd as Long,_
        nCmdShow as Long,_
        ret as Long
end sub

sub delay sec
    timer sec, [Next]
    wait
    [Next]
    timer 0
end sub


Andy

Edit: natuurlijk kan dit ook gedaan worden in native LB
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm

Berichtdoor Gordon » za aug 04, 2007 7:14 pm

Leuk om dergelijke listings te zien.
In de voegere Liberty BASIC (1 en 2) versies bestonden er nog weinig
native LB commando's. De listings stonden daarom
bol van Windows Calls. Jammer genoeg heb ik die periode niet bewust
meegemaakt. Ik ben met versie LB4 begonnen.

Misschien had je ook de vertraging in Windows kunnen houden

Code: Selecteer alles
call Pause 5000
wait

sub Pause ms
                calldll #kernel32,"Sleep",_
                ms as ulong, re as void
End Sub


Prachtig zoals ze dat allemaal bij Microsoft in DLL's
gestopt hebben.

p.s. Ik meen dat je ulong gebruiken moet voor handles.

Gordon[/list]
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Berichtdoor anthonio » zo aug 05, 2007 9:20 am

ja die mannen hebben letterlijk voor alles een API, je moet ze alleen weten te vinden en te ontcijferen.
lol inderdaad die sleep command had ook gekund :D
spijtig van die periode zou die idd ook graag meegemaakt hebben.
Ik heb alleen JB v1.01 (of is het nu v1.02) and LB v4.03 gekent.
Zal ongeveer een jaar geleden geweest zijn dat ik met JB begonnen ben.
Dual boot: Ubuntu 8.04 - WIndows XP SP2 (via VMware) - Windows Vista 32bit - Toshiba L40 - Dual Core @ 1,76GHz - 1GB RAM - 120GB HDD - VDSL Connection
Avatar gebruiker
anthonio
 
Berichten: 281
Geregistreerd: zo mei 20, 2007 9:58 pm


Keer terug naar API/DLL

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron