| |
|
|
AndreasS | Guten Morgen, die Frage: In einem Programm möchte ich gern PNG's als Schaltflächen verwenden. Dabei soll beim darüberfahren mit der Maus ein anderes Bild (ebenfalls mit transparentem Hintergrund) angezeigt werden und bei Mausklick ein weiteres. Über Mausbereiche kein Problem. Aber: das setzt den Einsatz der Abfrage (@mouse) voraus und dies verhindert den Einsatz von waitinput um auf andere (z.B.) Button zu reagieren. Weis irgend jemand eine Lösung ? Der Einsatz einer Message um das Waitinput zu durchbrechen, ist weder sinnvoll, noch nutzbringend.
Danke
Andreas |
|
|
| |
|
|
|
Jörg Sellmeyer | Hier hast Du schonmal einen Anfang: [...]
Der Einsatz einer Message um das Waitinput zu durchbrechen, ist weder sinnvoll, noch nutzbringend.
Öhm - wieso nicht? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 07.12.2011 ▲ |
|
|
|
|
AndreasS | Zunächst Danke. Aber das ist wenig hilfreich. Bildbutton sind kein Problem und mit BMP's zu arbeiten bringt nichts, wegen des fehlenden Alphakanals. Das Durchbrechen eines Waitinput bei Auftreten eines Mausereignisses nutzt garnichts, da ein Rücksprung ohne Probleme nicht möglich ist. Jedenfalls nicht ohne das der Programmablauf (hier) völlig durcheinander gerät.
Bye Andreas |
|
|
| |
|
|
|
| Vielleicht in diese Richtung. Neuzeichnen oder nach XProfan anpassen.
Declare be#,erg&,erg2&,x&,y&
Dim be#,8
DEF GetCursorPos(1) !"USER32","GetCursorPos"
DEF WindowFromPoint(2) !"USER32","WindowFromPoint"
DEF ChildWindowFromPoint(3) !"USER32","ChildWindowFromPoint"
Def GetSysColor(1) !"USER32","GetSysColor"
Def ScreenToClient(2) !"USER32","ScreenToClient"
cls GetSysColor(15)
DEF &WM_MOUSEMOVE 512
Usermessages &WM_MOUSEMOVE
MCLS 40,40,RGB(0,255,0)
var bmp1%=Create("hPic",0,"&MEMBMP")
MCLS 40,40,RGB(255,0,0)
var bmp2%=Create("hPic",0,"&MEMBMP")
var Hdlg&=control("Dialog","",$58000000,50,50,40,40,%hwnd,5000,0)
Startpaint Hdlg&
DrawPic bmp1%, 0, 0; 0
Endpaint Hdlg&
while 1
waitinput
case %key=2:BREAK
If %Umessage = &WM_MOUSEMOVE
GetCursorPos(be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg&=@WindowFromPoint(x&,y&)
If erg&<>0
ScreenToClient(erg&,be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg2&=@ChildWindowFromPoint(erg&,x&,y&)
If erg2&=Hdlg&
Startpaint Hdlg&
DrawPic bmp2%, 0, 0; 0
Endpaint Hdlg&
while 1
waitinput
If %Umessage = &WM_MOUSEMOVE
GetCursorPos(be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg&=@WindowFromPoint(x&,y&)
If erg&<>0
ScreenToClient(erg&,be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg2&=@ChildWindowFromPoint(erg&,x&,y&)
case erg2&<>Hdlg& : BREAK
EndIf
EndIf
If %MousePressed
Messagebox("Das war ein Mausklick im Bild!","I N F O",4160)
SetFocus(Hdlg&)
EndIf
Wend
Startpaint Hdlg&
DrawPic bmp1%, 0, 0; 0
Endpaint Hdlg&
endif
EndIf
endif
wend
DeleteObject bmp1%
DeleteObject bmp2%
Dispose be#
end
Gruß Thomas |
|
|
| |
|
|
|
Thomas Freier | Alphatrans geht vermutlich nur mit GDI+, oder es hilft [...] weiter. Beispiel mit GDI
$H windows.ph
$H Functions_GDIPLUS.ph
$H GDIP_Imageging.ph
$I GDIP_Helper.inc
Declare gdiplusToken&,ImageObject&,ImageObject1&,GraphicObject&,Attributes&
Declare Color_Matrix#
SetAutoPaint 1
gdiplusToken& = InitGDIPlus()'GDIPlus starten
Declare be#,erg&,erg2&,x&,y&
Dim be#,8
DEF GetCursorPos(1) !"USER32","GetCursorPos"
DEF WindowFromPoint(2) !"USER32","WindowFromPoint"
DEF ChildWindowFromPoint(3) !"USER32","ChildWindowFromPoint"
DEF GetSysColor(1) !"USER32","GetSysColor"
DEF ScreenToClient(2) !"USER32","ScreenToClient"
DEF &WM_MOUSEMOVE 512
cls GetSysColor(15)
Usermessages &WM_MOUSEMOVE
MCLS 100,100,GetSysColor(15)
var bmp1%=Create("hPic",0,"&MEMBMP")
var Hdlg&=control("Dialog","",$58000000,50,50,100,100,%hwnd,5000,0)
OBJECT "A-1.png"'Pfad anpassen
while 1
waitinput
case %key=2:BREAK
If %Umessage = &WM_MOUSEMOVE
GetCursorPos(be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg&=@WindowFromPoint(x&,y&)
If erg&<>0
ScreenToClient(erg&,be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg2&=@ChildWindowFromPoint(erg&,x&,y&)
If erg2&=Hdlg&
Create("Bitmap", Hdlg&, bmp1%, 0, 0)
OBJECT "A-2.png"'Pfad anpassen
while 1
waitinput
If %Umessage = &WM_MOUSEMOVE
GetCursorPos(be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg&=@WindowFromPoint(x&,y&)
If erg&<>0
ScreenToClient(erg&,be#)
x&=Long(be#,0)
y&=Long(be#,4)
erg2&=@ChildWindowFromPoint(erg&,x&,y&)
case erg2&<>Hdlg& : BREAK
EndIf
EndIf
If %MousePressed
Messagebox("Das war ein Mausklick im Bild!","I N F O",4160)
SetFocus(Hdlg&)
EndIf
Wend
Create("Bitmap", Hdlg&, bmp1%, 0, 0)
OBJECT "A-1.png"'Pfad anpassen
endif
EndIf
endif
case %wmpaint:OBJECT "A-1.png"'Pfad anpassen
wend
DeleteObject bmp1%
DeleteObject bmp2%
Dispose be#
ExitGDIPlus(gdiplusToken&)'GDIPlus beenden
end
PROC OBJECT
parameters file$
ImageObject1& = gdipLoadImage(file$)'Pfad anpassen
If ImageObject1&
'und auf %hWnd zeichnen
~GdipCreateFromHWND(Hdlg&,ADDR(GraphicObject&))'alle Graphics-Operationen auf %hWnd
~GdipDrawImageI(GraphicObject&,ImageObject&,20,0)'Bitmap zeichnen
'Bild2 mit zeichnen
~GdipDrawImageRectRect(GraphicObject&,ImageObject1&,0.0,0.0,Single(400.0),Single(400.0),0.0,0.0,Single(400.0),Single(400.0),~UnitPixel,Attributes&,0,0)
~GdipDisposeImageAttributes(Attributes&)
~GdipDisposeImage(ImageObject&)
~GdipDisposeImage(ImageObject1&)
~GdipDeleteGraphics(GraphicObject&)
Dispose Color_Matrix#
Endif
Endproc
Gruß Thomas |
|
|
| |
|
|