Foro | | | | Timotheus | Ciao,
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 Io l' 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 |
| | | | |
| | Michael Dell | Hallo Timo,
wenn ich das richtig sehe meinst du wohl ne art Listbox. Dann hilft dir vieleicht diese Demo: KompilierenMarkierenSeparierenDef LB_LastItem(1) Int(Sub(SendMessage(@&(1),$018B,0,0),1)) Index-Nummer des letzten Eintrag
Def LB_DelSel(1) SendMessage(@&(1),$0186,-1,0) hebt Markierungen auf
Def LB_GetSel(1) SendMessage(@&(1),$0188,0,0) Index-Nummer des Markierten Eintrags
Def LB_SelLastItem(1) SendMessage(@&(1),$0186,LB_LastItem(@&(1)),0) letzten Eintrag markieren
Def LB_SetSel(2) SendMessage(@&(1),$0186,@&(2),0) bestimmten Eintrag markieren
Declare lb01&
Cls
lb01& = Create(ListBox,%HWnd,,40,40,200,360) Erzeuge Listbox
AddString(lb01&,Eintrag_0) Setze Einträge 0-4
AddString(lb01&,Eintrag_1)
AddString(lb01&,Eintrag_2)
AddString(lb01&,Eintrag_3)
AddString(lb01&,Eintrag_4)
Achtung der erste Eintrag hat den Index 0
MessageBox(Str$(LB_LastItem(lb01&)),Letzter Eintrag:,0) Ausgabe Letzter Eintrag
LB_SetSel(lb01&,2) Markiere Eintrag Nr.: 2
MessageBox(Str$(LB_GetSel(lb01&)),Eintrag:,0) Ausgabe Eintrag
LB_DelSel(lb01&) Hebe Markierung auf
MessageBox(Str$(LB_GetSel(lb01&)),Eintrag:,0) Ausgabe Eintrag
LB_SelLastItem(lb01&) Markiere letzten Eintrag
MessageBox(Str$(LB_GetSel(lb01&)),Eintrag:,0) Ausgabe Eintrag
LB_DelSel(lb01&) Hebe Markierung auf
MessageBox(Str$(LB_GetSel(lb01&)),Eintrag:,0) Ausgabe Eintrag
WhileNot Equ(%MenuItem,-2)
WaitInput
If GetFocus(lb01&)
MessageBox(Str$(LB_GetSel(lb01&)),Eintrag:,0) Ausgabe Eintrag
Sleep 10
LB_DelSel(lb01&) Hebe Markierung auf
SetActiveWindow(%HWnd) Setze Focus aufs Hauptfenster
EndIf
EndWhile
End
Saluto
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 è 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 |
| | | | |
| | Michael Dell | Sorry, kleiner Irrtum!
Versuchs mal hiermit, es setzt den Cursor an den Anfang: KompilierenMarkierenSeparierenDef SetCurPosNull(1) sendmessage(@&(1),$00B1,0,0) Setzt den Cursor an den Anfang
declare ed01&
cls
ed01& = createedit(%HWnd,Hallolo, na wie gethts?,10,10,400,20)
WhileNot Equ(%MenuItem,-2)
WaitInput
Case GetFocus(ed01&): SetCurPosNull(ed01&)
EndWhile
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 |
| | | | |
| | Michael Dell | Ok, dann mal so: KompilierenMarkierenSeparierenDef 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
EndWhi
End
Michael...
P.S.: hab ich alles in der Profan- Aiuto 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 |
| | | | |
| | | So? KompilierenMarkierenSeparierencls
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?? KompilierenMarkierenSeparierenDEF @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
|
| | | | |
| | 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 Cambiamento, 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 per N zu addieren, also N = $8000 + $2, oder N = $2 setzen. $8000 = MOUSEEVENTF_ABSOLUTE
Saluto 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 |
| | | | |
| | 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 |
| | | | |
| | 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 ▲ |
| |
|
AnswerThemeninformationenDieses Thema hat 5 subscriber: |