| |
|
|
Ernst | Hallo Fachleute! Die Eingaben im Edit sollen per weitere Verarbeitung mit <Enter> abgeschlossen werden (analog wie bei Input; es soll aber eben nicht eine eigene Input-Dialogbox sein). Das Abfragen der Enter-Taste ist kein Problem, aber wie kann Io l' störenden Beep unterbinden? Ich hab schon geraume Zeit gegooglet, aber ohne etwas verwertbares zu finden. Hat jemand eine profane- oder api-Lösung ? Grüsse Ernst |
|
|
| |
|
|
|
RudiB. | was denn per ein Beep... habs mal getestet.... hier ein Beispiel aus dem Foro...
$H windows.ph
Def CN(2) If(%message = $0111,((&lparam = &(1)) And (HiWord(&wparam) = &(2))),0)
Def EN_CHANGE(1) CN(&(1),$0300)
Def EnterOn(1) (%key = 13) And (&lparam = &(1))
Cls
Var test& = Control("DIALOG","",$54000000,310,10,200,24,%hwnd,0,%hinstance)
Var Ed& = Create("Edit",test&,"Hier ist der Text",0,0,200,24)
SetFocus(Ed&)
Print "Taste oder Enter drücken"
While 1
WaitInput
Locate 2,1
If %key = 2
Break
ElseIf EnterOn(Ed&)
Print "Enter gedrückt " + GetText$(&lparam)
ElseIf EN_CHANGE(Ed&)
Print GetText$(&lparam)
EndIf
Wend
|
|
|
| |
|
|
|
Ernst | Vielen Dank; den Code von Jörg hatte ich schon mal gesehen, war aber nun anscheinend nicht imstande ihn wieder zufinden
bei obigem Code habe ich nun das Edit mit Farbe hinterlegt, jedoch bei read-only ist die Farbe weg (grauer Hintergrund) - ebenso ohne Farbe ( weißer Hintergrund) wird auf grau gesetzt.
$H windows.ph
$H messages.ph
Def CN(2) If(%message = ~WM_COMMAND,((&lparam = &(1)) And (hiword(&wparam) = &(2))),0)
Def EN_CHANGE(1) CN(&(1),~EN_CHANGE)
Def EnterOn(1) (%key = 13) And (&lparam = &(1))
Declare OCP&,Brush&
' -------------------------------------------------------------------------------------
Proc ControlProc
parameters Wnd&, Msg&, wParam&, lParam&
IF Brush&
~DeleteObject(Brush&)
Endif
If msg&=~WM_CTLCOLOREDIT or msg&=~WM_CTLCOLORSTATIC
Brush& = ~CreateSolidBrush(RGB(255,255,170))
~SetBkMode(wParam&, ~TRANSPARENT)
Return Brush&
Endif
Return ~CallWindowProc(OCP&,Wnd&, Msg&, WParam&, LParam&)
Endproc
' -------------------------------------------------------------------------------------
CLS
Var test& = Control("DIALOG","",$54000000,310,10,200,24,%hwnd,0,%hinstance)
Var Ed& = Create("Edit",test&,"Hier ist der Text",0,0,200,24)
OCP& = ~SetWindowLong(test&,~GWL_WNDPROC, ProcAddr(ControlProc,4))
SetFocus(Ed&)
SendMessage(ed&,$CF,1,0)' read only
Print "Taste oder Enter drücken"
While 1
WaitInput
Locate 2,1
If %key = 2
Break
ElseIf EnterOn(Ed&)
Print "Enter gedrückt " + GetText$(&lparam)
ElseIf EN_CHANGE(Ed&)
Print GetText$(&lparam)
EndIf
EndWhile
IF Brush&
~DeleteObject(Brush&)
Endif
End
gibt es nun irgendeine Möglichkeit, das Edit auf read-only zu setzen, wobei aber die Hintergrundfarbe erhalten bleibt ?
Grüsse und Dank im Vorhinein
hab's schon gefunden; wenn das Edit read-only ist, sendet es nicht ~WM_CTLCOLOREDIT sondern ~WM_CTLCOLORSTATIC. Im Code (oben) eingefügt und funkt. - JUHU |
|
|
| |
|
|