Deutsch
Forum

Mausklick simulieren

 
- Seite 1 -



Timotheus
Hallo,

Ich habe ein Problem. Ich möchte an einer bestimmten Stelle im Programm Fenster eine EditBox erstellen. Die y-Koordinate wird durch den Mausklick ausgewählt, und die x-K. ist 0.
In dieser Edit-Box kann aber schon ein Text stehen. Deshalb muss ich den Mausklick noch einmal wiederholen, sobald das Edit erzeugt wurde. Dadurch setzt sich der Cursor im Edit genau auf die richtige Stelle, wie in einem Multiedit. Wie mache ich das ?

Timo
 
11.09.2004  
 



 
- Seite 1 -



Michael
Dell
Sorry, kleiner Irrtum!

Versuchs mal hiermit, es setzt den Cursor an den Anfang:
KompilierenMarkierenSeparieren
Gruß

Michael
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
11.09.2004  
 




Timotheus
Nicht ganz, wenn zum Beispiel die Maus etwas weiter weg vom linken Fensterrand gedrückt wird, dann muss der Schreibbalken an z.B. der zweiten Stelle stehen. Kurz und einfach: Wie kann ich einen Mausklick an einer bestimmten Stelle simulieren?

Timo
 
12.09.2004  
 




Michael
Dell
Ok, dann mal so:
KompilierenMarkierenSeparieren
Def GSC(1)           !User32.dll,GetSysColor
Def ButtonUp(1)      Equ(If(Equ(%Lastmessage,514),1,If(Equ(%Lastmessage,512),SetFocus(&(1)),0)),1)
Def SetCurPosNull(1) SendKey(@&(1),36)  Setzt den Cursor an erste Stelle
Def SetCurPosEnd(1)  SendKey(@&(1),35)  Setzt den Cursor an letzte Stelle

Proc SetCurPos                          Setzt den Cursor an beliebige Stelle

    Parameters hndl&,anz&
    Case Lt(anz&,1)
    SendKey(hndl&,36)

    WhileLoop 1,@&(2),1

        SendKey(hndl&,39)

    EndWhile

EndProc

declare bt01&,ed01&,edak%
Clear bt01&,ed01&,edak%

Proc MakeED

    Parameters HWHndl&,Text$,x%,y%,b%,h%

    If Equ(edak%,0)                                    wenn Edit-Control nicht existent dann...

        ed01& = create(Edit,HWHndl&,Text$,x%,y%,b%,h%)  Erzweuge Edit-Control mit Text inhalt
        SetFocus(ed01&)                                  Setze Focus auf Edit-Control
        SetCurPos(ed01&,8)                              Setzt den Cursor an Stelle 8
        Sleep 1000
        SetCurPos(ed01&,6)                              Setzt den Cursor an Stelle 6
        Sleep 1000
        SetCurPos(ed01&,4)                              Setzt den Cursor an Stelle 4
        Sleep 1000
        SetCurPos(ed01&,2)                              Setzt den Cursor an Stelle 2
        Sleep 1000
        SetCurPosNull(ed01&)                            Setzt den Cursor an erste Stelle
        Sleep 1000
        SetCurPosEnd(ed01&)                             Setzt den Cursor an letzte Stelle
        Sleep 1000
        SetCurPosNull(ed01&)                            Setzt den Cursor an erste Stelle
        Sleep 1000

    EndIf

    Return 1

EndProc

SetTrueColor 1
WindowStyle 26
Window Add(%maxX,10),0-500,66
Cls GSC(15)
bt01& = create(Button,%HWnd,Erstelle Edit,360,10,120,22)
Window 0,0-500,66

WhileNot Or(Equ(%MenuItem,-2),Equ(%MenuItem,-4000))

    GetMessage

    If GetFocus(bt01&)

        If ButtonUp(%HWnd)

            edak% = MakeED(%HWnd,Hallolo, na wie gethts?,10,10,340,22)
            Case edak%: SetFocus(ed01&)

        EndIf

    EndIf

EndWhile

End

Michael...

P.S.: hab ich alles in der Profan- Hilfe nachgeschlagen!
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
12.09.2004  
 




Timotheus
Nein das auch nicht!

Hier mal ein Demo:
KompilierenMarkierenSeparieren
Hier fehlt nur die Def oder Proc SimuliereMausklick. In diesem Beispiel ist der Schreibbalken durch das wiederholte klicken an der richtigen Stelle. Das ist wie wenn man in ein vorhandenes Edit klickt, dann setzt sich der Balken ja auch automatisch an die Stelle die im Edit angeklickt wurde.

Timo
 
12.09.2004  
 



So?
KompilierenMarkierenSeparieren
cls
declare x%,a&,b&

while 1

    waitinput

    if %Mousekey = 1

        x% = %Mousex
        a& = Create(Edit,%Hwnd,Hallo,0,%Mousey - 12,600,25)
        @SENDMESSAGE(a&,$00B1,0,256)
        @SETFOCUS(A&)
        Sleep 1000
        destroyWindow(a&)

    endif

wend


Oder so??
KompilierenMarkierenSeparieren
DEF @mouse_event(5)!User32,mouse_event
CLS
declare x%,a&,b&

while 1

    Waitinput

    if %Mousekey = 1

        x% = %Mousex
        a& = Create(Edit,%Hwnd,Hallo,0,%Mousey - 12,600,25)
        @mouse_event(2,x%,%MOUSEY,0,0)
        @mouse_event(4,x%,%MOUSEY,0,0)
        @mouse_event(2,x%,%MOUSEY,0,0)
        @mouse_event(4,x%,%MOUSEY,0,0)
        Sleep 1000
        destroyWindow(a&)

    endif

wend

 
12.09.2004  
 




Dietmar
Horn
Noch als Ergänzung (zur Antwort von Andreas)

DEF @mouse_event(5)!User32,mouse_event

mouse_event(N,dx%,dy%,0,0)

=> löst eine künstliche Mausbewegung und einen Mausklick aus.
=> hat keinen Rückgabewert

N: gibt an, welche Maustaste gedrückt (simuliert) werden soll

N = $1 - Doppelklick simulieren
N = $2 - linke Maustaste runterdrücken
N = $4 - linke Maustaste loslassen
N = $8 - rechte Maustaste runterdrücken
N = $10 - rechte Maustaste loslassen
N = $20 - mittlere Maustaste runterdrücken (falls vorhanden)
N = $40 - mittlere Maustaste loslassen (falls vorhanden)

dx% = x-Koordinate der Mausposition (oder deren Änderung, wo sie von der derzeitigen Position aus gesehen, hingesetzt werden soll)
dy% = y-Koordinate der Mausposition (oder deren ...)

Der 4. und 5. Parameter haben keine Bedeutung, deswegen also jeweils auf 0 setzen.

Eventuell mußt Du noch ein bißchen mit den Mauskoordinaten experimentieren, weiß nicht, ob diese relativ oder absolut sind, ob bezogen auf den Desktop, das Hauptfenster, oder das Dialogfenster. Versuche dabei auch mal $8000 bei den Werten für N zu addieren, also N = $8000 + $2, oder N = $2 setzen. $8000 = MOUSEEVENTF_ABSOLUTE

Gruß
Dietmar
 
Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V.  [...] 

Windows 95 bis Windows 7
Profan² 6.6 bis XProfan X2 mit XPSE

Das große XProfan-Lehrbuch:  [...] 
12.09.2004  
 




Timotheus
Danke

Timo
 
12.09.2004  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Gibts denn die API mouse_event  unter XP/NT überhaupt noch?
Zitat von MSDN:


The mouse_event function synthesizes mouse motion and button clicks.
Windows NT: This function has been superseded. Use SendInput instead.


SeeYou
Pascal
 
13.09.2004  
 




Michael
Dell
Microsoft wollte mouse_event schon früher ersetzen, das steht jedenfalls so in der WinHlp no Win32s. Ich denk aus Supportgründen funktioniert es im Moment noch, man sollte wohl in Zukunft darauf verzichten. In Longhorn wirds wohl nicht mehr gehen.

Michael...
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
13.09.2004  
 



 
- Seite 2 -



Michael
Dell
Hier das ganze ohne mouse_event:
KompilierenMarkierenSeparieren
Declare a&,x&,y&,Fontx&,EDminX&
FontX&  = 8                                                 Font- Breite
EDminX& = 10                                                Edit- Control Startpunkt (X min)
Def SetCurMark(2) sendmessage(@&(1),$00B1,@&(2),0)          Setzt Markierung

Proc SetCurPos                                              Setzt den Cursor an beliebige Stelle

    Parameters hndl&,anz&
    SetFocus(hndl&)
    SendKey(hndl&,36)
    Case Lt(anz&,1): Return

    WhileLoop 1,@&(2),1

        SendKey(hndl&,39)

    EndWhile

EndProc

Proc CalkCurPos

    Parameters EDhndl&
    Declare p1&,p2&

    If Gt(x&,Add(EDminX&,Mul(Len(GetText$(EDhndl&)),FontX&)))  Mauszeiger hinter Textende

        p1& = Len(GetText$(EDhndl&))

    ElseIf Gt(x&,EDminX&)                                     Mauszeiger im Text

        p1& = Int(Div(Sub(x&,EDminX&),FontX&))
        Else                                                      Mauszeiger vor Text
        p1& = 0

    EndIf

    SetCurPos(EDhndl&,p1&)                                    Setzt den Cursor auf Mausposition
    SetCurMark(EDhndl&,p1&)                                   Setzt Markierung 0 bis Mausposition

EndProc

CLS
UseFont Arial,16,FontX&,1,0,0
SetDialogFont 1

while 1

    Waitinput

    if %Mousekey = 1

        x& = %Mousex
        y& = %Mousey
        a& = Create(Edit,%Hwnd,Hallolo, na wie geht`s den so?,EDminX&,y& - 12,600,25)
        CalkCurPos(a&)
        Sleep 2000
        destroyWindow(a&)

    endif

wend

SetDialogFont 0
End

Nur um zu sehn das es auch in reinem Profan geht.

Michael...
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
14.09.2004  
 



Hallo Michael...

Vollkommen richtig!! Die Message steht schon in meinem ersten Quelltext ein bischen weiter oben als Alternative zu MOUSE_EVENT. Aber er wollte so unbedingt einen Doppelklick.
Ich sags ja - ziemlich unideal und unübersichtlich, wenn man den Quelltext nicht sofort sieht...
 
14.09.2004  
 



Jaja OK AH, ich habs ja verstanden.

Ich überleg mir ja schon was....

iF
 
14.09.2004  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.552 Betrachtungen

Unbenanntvor 0 min.
Sven Bader04.07.2023
H.Brill06.02.2022
AndreasS29.11.2018
RICOSCH17.06.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie