Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 240881 (2317)
  Suchen
 Zurück zur Übersicht
 AutorThema: %MouseKey und %ScanKey
Wolfgang Voigt
Datum:11.09.02 08:47 Antwortenals Email verschicken (wolfgang.voigt@modata.de) 


Hallo allerseits

ich bin über einen Fehler (?) in Profan gestolpert.
Die Systemvariablen %MouseKey und %ScanKey werden bei einem 2.waitinput mit Focus auf ein DialogFenster nicht gesetzt.
Beispiel siehe unten. Tritt in Version 4.5;7.0;7.5 auf.
Ist es ein Fehler ( wie kann ich ihn umgehen ?) oder stelle ich mich nur zu blöd an ?

Für eine baldige Antwort bin ich dankbar, weil ich sonst in meinem Projekt nicht weiter komme.

Besten Dank

Wolfgang

Declare ProgCtrl%, ausw$, pos%

PROC auswahl
'===========
Declare h_lb%, h_dlg%, ctrl%
Let h_dlg% = @createdialog(%Hwnd," TEST ",250,50,100,180)
Let h_lb% = @CreateListBox(h_dlg%,"",3,3,98,148)
@AddString(h_lb%,"text1")
@AddString(h_lb%,"text2")
@AddString(h_lb%,"text3")
@setFocus(h_lb%)
Let ctrl% = 1
WHILE ctrl%
waitinput
print "S", %MOUSEKEY, %ScanKey, %KEY
CASE @equ(%KEY,13) : Let ctrl% = 0 ' Enter
CASE @equ(%KEY,2) : Let ctrl% = 0 ' Schliessen
CASE @equ(%MOUSEKEY,1) : Let ctrl% = 0 ' linkeMausTaste
ENDWHILE
Let ausw$ = @GetString$(h_lb%,@GetCursel(h_lb%))
Let pos% = @GetCursel(h_lb%)
@DestroyWindow(h_dlg%)
ENDIF
print "> ", pos%, ausw$
ENDPROC

WindowTitle "TEST"
WindowStyle $0F
Window 1,1-800,600

AppendMenuBar 99," &Ende "
AppendMenuBar 220," &TEST "

Let ProgCtrl% = 0
WHILENOT ProgCtrl%
WaitInput
print "M", %MOUSEKEY, %ScanKey, %KEY
IF @MenuItem(99)
Let ProgCtrl%=1
ELSEIF @MenuItem(220)
auswahl
ENDIF
ENDWHILE
END



Thomas Ungerböck
Datum:11.09.02 12:01 Antwortenals Email verschicken (Kerzenlicht@Chello.at) 


Hallo Wolfgang

In Dialogfenstern funktionieren %Mousekey und %Scankey usw. nicht. Da musst du dir anders helfen. (Wär schön wenn das bei Profan 8.0 endlich geändert wird).

Hier ein kleiner Testquelltext:

DECLARE Mausposition#,x&,y&
Dim Mausposition#, 4

Windowstyle 8
Cls
Window 0,0-1024,768
@CreateWindow(%Hwnd,"",100,0,250,450)
While 1
Getmessage
case @Equ(&WParam,27):break
Long Mausposition#, 0 = &LParam
x& = @Word(Mausposition#,0)
y& = @Word(Mausposition#,2)
Print "  @getactivewindow()",@getactivewindow(),"  %Message",%Message,"  &WParam",&WParam,"  &LParam",&LParam,"  %MWnd",%MWnd,"  %PeekMessage",%PeekMessage,"  %LastMessage",%LastMessage
Print "    ",X&,"   ",Y&
Wend
Dispose Mausposition#
End

&Wparam gibt dir die gedrückte Taste wieder, bei &LParam ist die Mausposition.

Gruß Thomas


Wolfgang Voigt
Datum:11.09.02 13:01 Antwortenals Email verschicken (wolfgang.voigt@modata.de) 


Besten Dank für die schnelle Antwort.

Leider ist mir damit nicht wirklich geholfen.

Mein Dialogelement wird nur von einer Listbox ausgefüllt, in der bis zu 40 Elemente auswählbar sein sollen. Diese Auswahl soll mit der Maus (Doppelklick) oder mit den Cursortasten und Enter möglich sein, je nach User. Das Dialogelement ist nur vorhanden, um die Auswahl mit <Schliessen> abbrechen zu können.

Gibt es da überhaupt keine andere Möglichkeit, als auf Profan 8.0 zuwarten, wo ich mir doch gerade 7.5 zugelegt habe.

m.f.g
Wolfgang



Gumpp Dieter
Datum:12.09.02 17:20 Antwortenals Email verschicken (Dieter.Gumpp@t-online.de) 


Hallo,
wozu brauchst du in der Listbox eigentlich diese Mausabfragen?
Mit @GetCursel(h_lb%) kannst du mit Maus und Tastatur die
Elemente anwählen und abfragen.
Oder hab ich da was falsch verstanden?

MfG
Dieter




Wolfgang Voigt
Datum:13.09.02 08:35 Antwortenals Email verschicken (wolfgang.voigt@modata.de) 


Hallo Dieter

es geht mir darum, das ich mit Enter oder Doppelklick eine Auswahl treffen kann, mit @GetCursel(h_lb%) hole ich dann die Position ab.


Dieter Gumpp
Datum:14.09.02 12:43 Antwortenals Email verschicken (Dieter.Gumpp@t-online.de) 


Hallo Wolfgang,
versuchs mal mit dieser kleinen Routine. Funktioniert bei mir
ganz gut. Man kann mit Maus und Tastatur auswählen/abfragen und
das TestFenster mit x wegklicken.
MfG
Dieter

Declare ProgCtrl%, ausw$, pos%,h_lb%,taste%,button%,msg%

PROC auswahl
'===========
Declare h_dlg%, ctrl%
Let h_dlg% = @createdialog(%Hwnd," TEST ",250,50,100,180)
Let h_lb% = @CreateListBox(h_dlg%,"",3,3,98,148)
@AddString(h_lb%,"text1")
@AddString(h_lb%,"text2")
@AddString(h_lb%,"text3")
@AddString(h_lb%,"text4")
@AddString(h_lb%,"text5")
@AddString(h_lb%,"text6")
@AddString(h_lb%,"text7")
@AddString(h_lb%,"text8")
@AddString(h_lb%,"text9")
@setFocus(h_lb%)
Let ctrl% = 1
WHILE ctrl%



getmessage
button% = 0
taste% = 0
msg% = %message
If @equ(msg%,$100) 'tastaturabfrage
button% = -1
taste% = &WPARAM 'welche taste?
ElseIf @equ(msg%,15) 'fenster schliessen mit x
button% = 15
ElseIf @equ(%message,$0134) 'maus links
button% = 1
ElseIf @equ(%message,$0202) 'maus links doppelklick
button% = 11
ElseIf @equ(%message,$0204) 'maus rechts
button% = 2
ElseIf @equ(%message,$0206) 'maus rechts doppelklick
button% = 22
EndIf
rem
If @Equ(button%,-1)
Print "Taste>",taste%
ElseIf @Equ(button%,2)
Print "rechts"
ElseIf @Equ(button%,22)
Print "rechts doppelt"
ElseIf @Equ(button%,1)
Print "links"
ElseIf @Equ(button%,11)
Print "links doppelt"
EndIf
CASE @equ(taste%,13) : Let ctrl% = 0 ' Enter
CASE @equ(button%,15) : Let ctrl% = 0 ' Schliessen x
CASE @equ(button%,11) : Let ctrl% = 0 ' Schliessen DoppelKlick links



ENDWHILE
Let ausw$ = @GetString$(h_lb%,@GetCursel(h_lb%))
Let pos% = @GetCursel(h_lb%)
@DestroyWindow(h_dlg%)
ENDIF
print "> ", pos%, ausw$
ENDPROC

WindowTitle "TEST"
WindowStyle $0F
Window 1,1-800,600

AppendMenuBar 99," &Ende "
AppendMenuBar 220," &TEST "

Let ProgCtrl% = 0
WHILENOT ProgCtrl%
WaitInput
print "M", %MOUSEKEY, %ScanKey, %KEY,@GetCursel(h_lb%)
IF @MenuItem(99)
Let ProgCtrl%=1
ELSEIF @MenuItem(220)
auswahl
ENDIF
ENDWHILE
END





Wolfgang Voigt
Datum: 16.09.02 09:16 Antwortenals Email verschicken (wolfgang.voigt@modata.de) 


Hi Dieter,

Danke für Deine Unterstützung, funktioniert gut.

mfg
Wolfgang


 Zurück zur Übersicht