Ronde Knop

Algemene discussies en vragen omtrent Liberty BASIC programma's. Stuur zoveel mogelijk delen van listings (snippets) in als je hulp wilt.

Moderators: anthonio, Abcott

Ronde Knop

Berichtdoor glpape » za feb 05, 2011 12:42 am

Dit is een poging om een Ronde Knop in een gewoon venster te hebben.
Later dit weekend wil ik ook een Ronde Knop proberen in een grafisch venster. Dat zal heel anders gaan; je moet op verschillende manieren improviseren want Windows werkt altijd met rechthoeken.

Nu dus eerst het gewone venster. Het programma doet het volgende:
in een graphisch Hulp Venster (#WG) wordt een cirkel getekend op een veld in de kleur van de BackgroundColor van het Hoofd Venster. Een vierkant waar deze cirkel juist in past wordt dan in het geheugen geladen als Bitmap "abc". Deze bitmap wordt gebruikt voor een bmp-button in het Hoofd Venster. Dat zijn de hoofdlijnen.

Het is al met al nog vrij veel regels code. Tussendoor wordt bv bitmap "abc" tijdelijk op schijf gezet, want het bmpbutton commando kan alleen bitmaps laden die zijn opgeslagen. Het programma waarschuwt als er al een file "abc.bmp" bestaat.
Tenslotte zit er een API-call in die de background-mode van het grafisch venster "transparent" maakt. Deze is essentieel als je tekst over ander grafisch werk wilt plaatsen en voegt 4 regels aan de listing toe. Als je de 6-de regel van de code uitschakelt zie je het verschil: de background van de tekst haalt stukken uit de cirkel.

Code: Selecteer alles
nomainwin
call SetWdw 800, 50, 200, 250
open "#WG" for graphics as #WG
hWG = hwnd(#WG)
calldll #user32, "GetDC", hWG as ulong, hdcWG as long
calldll #gdi32, "SetBkMode", hdcWG as long, _TRANSPARENT as long, rtn as long

#WG "fill buttonface; place 100 100; size 5; color yellow; down"
#WG "backcolor 225 255 100; circlefilled 25"
#WG "place 77 107; font arial 7 20; color black;\ Close "
#WG "getbmp abc 72 72 56 56"
   if ife(DD$, "abc.bmp") then
   confirm "File  <abc.bmp>  already exists: Replace ?"; aa$
   if aa$ = "no" then [qqq]
   end if
bmpsave "abc", "abc.bmp"
close #WG : hWG = 0

call SetWdw 250, 150, 500, 500
bmpbutton #WW.bb1, "abc.bmp", [qq], UL, 425, 10
stylebits #WW, _WS_BORDER, 0, 0, 0
open "" for window_popup as #WW                     ' Main Application Window
#WW "trapclose [qq]"
wait

[qq]
close #WW
if ife(DD$, "abc.bmp") then kill "abc.bmp"
[qqq]
CallDll #user32, "ReleaseDC", hWG as ulong, hdcWG as long, rtn as long
unloadbmp "abc"
if hWG then close #WG
end

function ife(path$, filename$)              ' IfFileExists   DD$ for DefaultDir$
dim info$(10,10)                            ' note: path, filename in dble quotes
if path$=DD$ then path$ = DefaultDir$
files path$, filename$, info$()
ife = val(info$(0,0))                       ' returns 1 if file exists, otherwise 0
end function

sub SetWdw a,b,c,d                          ' sets ULX, etc
UpperLeftX = a
UpperLeftY = b
WindowWidth = c
WindowHeight = d
end sub


George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

Keer terug naar Liberty BASIC Code

Wie is er online

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

cron