Deutsch
Forum

Mausklick simulieren

 

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  
 




Michael
Dell
Hallo Timo,

wenn ich das richtig sehe meinst du wohl ne art Listbox.
Dann hilft dir vieleicht diese Demo:
KompilierenMarkierenSeparieren
Gruß

Michael
 
Salu Michael...

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




Timotheus
Ich möchte an einer bestimmte Stelle ein Edit erzeugen.

Das geschieht wenn eine MausTaste gedrückt wird:
Create(Edit,%Hwnd,Ich bin ein Edit,0,%mousey,%WinRight,25)

Jetzt möchte ich aber den Schreibbalken im Edit an die richtige Stelle bringen. Das heißt wenn ich ganz links am Fenster eine Mausteste drücke, dann möchte ich zuerst das Edit erzeugen, und dann an
%Mousex und %Mousey einen Mausklick simulieren. Dadurch steht dann der Schreibbalken vor dem ersten Zeichen.

Timo
 
11.09.2004  
 




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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.596 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