Forum |  |  |   |   |    Thomas Freier | Ich wollte gerne Bilder verschieben und mit Text vesehen können. Leider bekomme ich immer nur das Erste zufassen. Wie könnte man das lösen oder gibt es eine andere Lösung? KompilierenMarkierenSeparierenDECLARE hButt&[22],hText&[22]
Def GetSysColor(1) !"user32","GetSysColor"
Def @Getwindowrect(2) !"USER32", "GetWindowRect"
Def @Screentoclient(2) !"USER32","ScreenToClient"
DEF mouseposx(0) long(mousepos#,0)
DEF mouseposy(0) long(mousepos#,4)
Def Getcursorpos(1) !"USER32","GetCursorPos"
declare mousepos#,HT_Info#
DIM MousePos#,10
DIM HT_Info#,16
Cls GetSysColor(15)
Windowtitle "Linke Maustaste = verschieben, rechte Maustaste = Texteingabe"
Window 800,600
UserMessages $204
var bild.w&=%hWnd
var x%=1
var bmp1&=Create("hNewPic", 300, 202,rgb(0,0,218))
hButt&[x%] = Control("DIALOG","B",$54001100, 0, 30, 300, 210,bild.w&,0,%hinstance,$0)
Create("Bitmap", hButt&[x%], Bmp1&, 0, 0)
Create("text",hButt&[x%],"Boot Nr. 66",0,170,300,20)
hText&[x%] =  Create("text",hButt&[x%],"",0,190,300,20)
SetText hText&[x%],"Bitte Standort prüfen"
Subclass hButt&[x%],1
x%=2
bmp1&=Create("hNewPic", 300, 202,rgb(218,0,0))
hButt&[x%] = Control("DIALOG","",$54001100, 0, 330, 300, 210,bild.w&,0,%hinstance,$0)
Create("Bitmap", hButt&[x%], Bmp1&, 0, 0)
Create("text",hButt&[x%],"Boot Nr. 60",0,170,300,20)
hText&[x%] =  Create("text",hButt&[x%],"",0,190,300,20)
SetText hText&[x%],"Bitte benachrichtigen"
Subclass hButt&[x%],1
Declare B#,x1%,x2%,y1%,y2%,Element&
Dim B#,16
While 1
    WaitInput
    Case %key=2: BREAK
    if %umessage=$204
        if GetActiveWindow(hButt&[1])
            x%=1
            BILD_POS
            BILD_EDIT
        Elseif GetActiveWindow(hButt&[2])
            x%=2
            BILD_POS
            BILD_EDIT
        endif
    endif
EndWhile
DeleteObject bmp1&
Subclass hButt&[1],0
Subclass hButt&[2],0
dispose b#
Dispose MousePos#
Dispose HT_Info#
End
Proc BILD_EDIT
    Element&=Create("Edit",%hwnd,"",(x1%-244),(y1%+36),x2%,21)
    While 1
        SetFocus(Element&)
        GetMessage
        case iskey(27):BREAK
        CursorPos
        If (mouseposx(0)<(x1%-244))
            OR (mouseposy(0)>(y1%+80))
            OR (mouseposx(0)>(x1%-244+x2%))
            OR (mouseposy(0)<(y1%-80))
            SetText hText&[x%],GetText$(Element&)
            BREAK
        endif
        If iskey(13)Speichern Enter gedrückt
            SetText hText&[x%],GetText$(Element&)
            BREAK
        endif
    wend
    DestroyWindow(Element&)
EndProc
Proc BILD_POS
    Dim B#,16
    Getwindowrect(hButt&[x%],B#)
    x1%=Long(B#,0)
    y1%=Long(B#,4)
    Screentoclient(hButt&[x%],B# + 8)
    x2%=Long(B#,8)
    Dispose B#
EndProc
Proc CursorPos
    getcursorpos(mousepos#)                                    Mausposition ermitteln
    ScreenToClient(%hwnd,mousepos#)                       In Bildirmkoordinaten umrechen
    Long Ht_info#,0=Long(mousepos#,0)
    Long Ht_info#,4=Long(mousepos#,4)
    Long Ht_info#,8=0
    Long Ht_info#,12=0
Endproc
SubClassProc
    If  SubClassMessage(hButt&[1], $200)
        PostMessage(hButt&[1], $A1, $2, 0)
        Set("WinProc", 0)
    ElseIf  SubClassMessage(hButt&[2], $200)
        PostMessage(hButt&[2], $A1, $2, 0)
        Set("WinProc", 0)
    EndIf
Endproc
 |  
  |  |   |   |  |  |   |  
 
 
  |   |    Jörg Sellmeyer | | Mh - was meinst Du damit. Ich kann beide Bilder "anfassen" und verschieben. |  
  |  |   |   | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ...    | 24.05.2010  ▲ |  
  |  |   |  
 
 
  |   |    Dieter Zornow | | Also bei mir kann ich beide Bilder verschieben, wenn ich draufklicke und die Maus bewege, funktioniert sogar prima. |  
  |  |   |   | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2  | 24.05.2010  ▲ |  
  |  |   |  
 
 
  |   |    Thomas Freier | Ja, das mit dem verschieben geht, aber wie ermittel ich, auf welchem "Bild" ein Rechtsklick erfolgt ist. Dass das bei Bild1 geht, und dann das Edit erstellt wird, ist wohl zufällig. |  
  |  |   |   |  |  |   |  
 
 
  |   |    Thomas Freier | Ist zwar nicht optimal, aber es geht wie gedacht: KompilierenMarkierenSeparierenDeclare W1&,W2&
Declare C2sstrc#
Def @Clienttoscreen(2) !"USER32","ClientToScreen"
Def @G2lx(0) @Long(C2sstrc#,0)
Def @G2ly(0) @Long(C2sstrc#,4)
Proc G2l
    Parameters Hdl&
    Clear C2sstrc#
    Clienttoscreen(Hdl&,C2sstrc#)
Endproc
Dim C2sstrc#,8
Def GetSysColor(1) !"user32","GetSysColor"
Def Getwindowrect(2) !"USER32", "GetWindowRect"
Def Screentoclient(2) !"USER32","ScreenToClient"
DEF GetCursorPos(1) !"USER32","GetCursorPos"
DEF WindowFromPoint(2) !"USER32","WindowFromPoint"
Def GetWindowText(3) !"USER32","GetWindowTextA"
DEF mouseposx(0) long(mousepos#,0)
DEF mouseposy(0) long(mousepos#,4)
declare mousepos#,HT_Info#
DIM MousePos#,10
DIM HT_Info#,16
Declare bereich#,be#,erg&,x&,y&,text$
Dim be#,8
Dim bereich#,1024
DECLARE hButt&[22],hText&[22]
Cls GetSysColor(15)
Windowtitle "Linke Maustaste = verschieben, rechte Maustaste = Texteingabe"
Window 800,600
UserMessages $204
var bild.w&=%hWnd
var x%=1
var bmp1&=Create("hNewPic", 300, 202,rgb(0,0,218))
hButt&[x%] = Control("DIALOG",str$(x%),$54001100, 0, 30, 300, 210,bild.w&,0,%hinstance,$0)
Create("Bitmap", hButt&[x%], Bmp1&, 0, 0)
Create("text",hButt&[x%],"Boot Nr. 66",0,170,300,20)
hText&[x%] =  Create("text",hButt&[x%],"",0,190,300,20)
SetText hText&[x%],"Bitte Standort prüfen"
Subclass hButt&[x%],1
x%=2
bmp1&=Create("hNewPic", 300, 202,rgb(218,0,0))
hButt&[x%] = Control("DIALOG",str$(x%),$54001100, 0, 330, 300, 210,bild.w&,0,%hinstance,$0)
Create("Bitmap", hButt&[x%], Bmp1&, 0, 0)
Create("text",hButt&[x%],"Boot Nr. 60",0,170,300,20)
hText&[x%] =  Create("text",hButt&[x%],"",0,190,300,20)
SetText hText&[x%],"Bitte benachrichtigen"
Subclass hButt&[x%],1
Declare B#,x1%,x2%,y1%,y2%,Element&,hx%,hy%
Dim B#,16
While 1
    WaitInput
    Case %key=2: BREAK
    if %umessage=$204
        GetCursorPos(be#)
        x&=Long(be#,0)
        y&=Long(be#,4)
        erg&=@WindowFromPoint(x&,y&)
        GetWindowText(erg&,bereich#,128)
        text$=String$(bereich#,0)
        if text$="1"
            x%=1
            BILD_EDIT
        Elseif text$="2"
            x%=2
            BILD_EDIT
        endif
    endif
EndWhile
DeleteObject bmp1&
Subclass hButt&[1],0
Subclass hButt&[2],0
Dim be#
Dim bereich#
Dispose b#
Dispose MousePos#
Dispose HT_Info#
End
Proc BILD_EDIT
    G2l bild.w&
    hx%=G2lx()
    hy%=G2ly()
    G2l hText&[x%]
    x1%=G2lx()-hx%
    y1%=G2ly()-hy%
    Element&=Create("Edit",%hwnd,"",x1%,y1%,300,21)
    While 1
        SetFocus(Element&)
        GetMessage
        case iskey(27):BREAK
        CursorPos
        If (mouseposx(0)<x1%)  OR (mouseposx(0)>(x1%+300))       Speichern wenn Maus aus dem Bereich
            SetText hText&[x%],GetText$(Element&)
            BREAK
        ElseIf (mouseposy(0)>(y1%+20)) OR (mouseposy(0)<(y1%-200))
            SetText hText&[x%],GetText$(Element&)
            BREAK
        ElseIf (iskey(13))                                         Speichern Enter
            SetText hText&[x%],GetText$(Element&)
            BREAK
        endif
    wend
    DestroyWindow(Element&)
EndProc
Proc CursorPos
    getcursorpos(mousepos#)                                    Mausposition ermitteln
    ScreenToClient(%hwnd,mousepos#)                       In Bildirmkoordinaten umrechen
    Long Ht_info#,0=Long(mousepos#,0)
    Long Ht_info#,4=Long(mousepos#,4)
    Long Ht_info#,8=0
    Long Ht_info#,12=0
Endproc
SubClassProc
    If  SubClassMessage(hButt&[1], $200)
        PostMessage(hButt&[1], $A1, $2, 0)
        Set("WinProc", 0)
    ElseIf  SubClassMessage(hButt&[2], $200)
        PostMessage(hButt&[2], $A1, $2, 0)
        Set("WinProc", 0)
    EndIf
Endproc
 und zum Feierabend noch ne Runde [...]   |  
  |  |   |   |  |  |   |  
 
 
  |  
 AntwortenThemenoptionen | 2.490 Betrachtungen |  
 ThemeninformationenDieses Thema hat 3 Teilnehmer:  |