Foro | | | | Manfred Barei | Ciao,
ich hoffe es kann mir einer helfen, vieleicht sogar Stefan Schnell. (Probiere mit deinem Code RichEdit: Cursor abfragen)
Ich probiere und probiere und bekomme es einfach nicht hin , es geht darum, in der Statuszeile soll die Anzeige der Zeilen und Spaltenanzahl laufend aktualisiert werden wenn ich im Editorfeld Eingaben mache. Habe schon einiges probiert jedoch klappt es nur wenn ich auf den Butten (Cursor-Position) Clicke. Siehe Code: KompilierenMarkierenSeparieren $P+
SET("ERRORLEVEL",0)
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
-Header-Dateien------------------------------------------------------
$H Windows.ph
$H RichEdit.ph
$H Structs.ph
$H Messages.ph
-Strukturen----------------------------------------------------------
DECLARE RICHEDIT1&
DECLARE BUTTON1&
DECLARE BUTTON2&
Declare CharRange#
Struct CharRange = ~CHARRANGE
Dim CharRange#, CharRange
-Funktion GetCursorPosX (Spalte)-------------------------------------
Proc GetCursorPosX
SendMessage(RICHEDIT1&, ~EM_EXGETSEL, 0, CharRange#)
Return Int(CharRange#.cpMax& - (SendMessage(RICHEDIT1&,
~EM_LINEINDEX, SendMessage(RICHEDIT1&, ~EM_EXLINEFROMCHAR, 0,
CharRange#.cpMin&), 0)) + 1)
EndProc
-Funktion GetCursorPosY (Zeile)--------------------------------------
Proc GetCursorPosY
SendMessage(RICHEDIT1&, ~EM_EXGETSEL, 0, CharRange#)
Return Int(SendMessage(RICHEDIT1&, ~EM_EXLINEFROMCHAR, 0,
CharRange#.cpMin&) + 1)
EndProc
Proc position
SetText Sz&, 0, " Zeile: " + @Str$(GetCursorPosY())
SetText Sz&, 1, " Spalte: " + @Str$(GetCursorPosX())
EndProc
WINDOWSTYLE 539
WINDOWTITLE "Test"
WINDOW (%maxx/2 - 280/2),(%maxy/2 - 320/2) - 280,320
SET("TRUECOLOR",1)
DECLARE ENDE%
CLS GETSYSCOLOR(15)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
Hier kann ggf. Ihr Menü hin
RICHEDIT1& = CREATE("RICHEDIT",%HWND,"",0015,0015,0245,0175)
BUTTON1& = CREATE("BUTTON",%HWND,"Cursor Position",0020,0215,0100,0030)
BUTTON2& = CREATE("BUTTON",%HWND,"Prog. Ende",0150,0215,0100,0030)
-----------------------------Statuszeile------------------------------
Declare L#,Sz&
Dim L#, 12 Long-Bereich für 3 Felder (3 * 4 Bytes)
Long L#,0 = 75, 195, -1 Maße der einzelnen Statusfelder
Sz& = @Create("StatusWindow",%HWND,"",3,L#) StatusWindow erzeugen
SetText Sz&, 0, " Zeile:" Feld1 mit Text bestücken
SetText Sz&, 1, " Spalte:" Feld2 mit Text bestücken
SetText Sz&, 2, Date$(0) Feld3 mit Text bestücken
---------------------------------------------------------------------
SETFOCUS(%HWND)
REPAINT
WHILENOT ENDE%
WAITINPUT
If %KEY=2
ENDE% = 1
ELSEIF %KEY=4
SETWINDOWPOS Sz& = 0,0 - 0,0;0
ELSEIF CLICKED(RICHEDIT1&) RICHEDIT
ELSEIF CLICKED(BUTTON1&) BUTTON Cursor Position
position
ELSEIF CLICKED(BUTTON2&) BUTTON Prog. Ende
ENDE% = 1
ENDIF
position
ENDWHILE
End
Saluto Manfred |
| | | Zu wenig Wissen ist gefärlich, zu viel auch.(XProfan X4) | Win 10 Pro 64 | Win7 Ultimate 32/64 | AMD FX-8320, 16GB, GeForce GT 630 | | 21.03.2010 ▲ |
| |
| | Thomas Freier | Kannst du mit GetMessage leben statt WAITINPUT? Oder per SubProc. |
| | | | |
| | Detlef Jagolski | Ciao,
Teste das mal. KompilierenMarkierenSeparieren $P+
SET("ERRORLEVEL",0)
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
-Header-Dateien------------------------------------------------------
$H Windows.ph
$H RichEdit.ph
$H Structs.ph
$H Messages.ph
-Strukturen----------------------------------------------------------
DECLARE RICHEDIT1&
DECLARE BUTTON1&
DECLARE BUTTON2&
Declare CharRange#
Struct CharRange = ~CHARRANGE
Dim CharRange#, CharRange
-Funktion GetCursorPosX (Spalte)-------------------------------------
SubClassProc
If SubClassMessage(RICHEDIT1&, ~WM_CHAR)
position
EndIf
EndProc
Proc GetCursorPosX
SendMessage(RICHEDIT1&, ~EM_EXGETSEL, 0, CharRange#)
Return Int(CharRange#.cpMax& - (SendMessage(RICHEDIT1&,
~EM_LINEINDEX, SendMessage(RICHEDIT1&, ~EM_EXLINEFROMCHAR, 0,
CharRange#.cpMin&), 0)) + 1)
EndProc
-Funktion GetCursorPosY (Zeile)--------------------------------------
Proc GetCursorPosY
SendMessage(RICHEDIT1&, ~EM_EXGETSEL, 0, CharRange#)
Return Int(SendMessage(RICHEDIT1&, ~EM_EXLINEFROMCHAR, 0,
CharRange#.cpMin&) + 1)
EndProc
Proc position
SetText Sz&, 0, " Zeile: " + @Str$(GetCursorPosY())
SetText Sz&, 1, " Spalte: " + @Str$(GetCursorPosX())
EndProc
WINDOWSTYLE 539
WINDOWTITLE "Test"
WINDOW (%maxx/2 - 280/2),(%maxy/2 - 320/2) - 280,320
SET("TRUECOLOR",1)
DECLARE ENDE%
CLS GETSYSCOLOR(15)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
Hier kann ggf. Ihr Menü hin
RICHEDIT1& = CREATE("RICHEDIT",%HWND,"",0015,0015,0245,0175)
BUTTON1& = CREATE("BUTTON",%HWND,"Cursor Position",0020,0215,0100,0030)
BUTTON2& = CREATE("BUTTON",%HWND,"Prog. Ende",0150,0215,0100,0030)
-----------------------------Statuszeile------------------------------
Declare L#,Sz&
Dim L#, 12 Long-Bereich für 3 Felder (3 * 4 Bytes)
Long L#,0 = 75, 195, -1 Maße der einzelnen Statusfelder
Sz& = @Create("StatusWindow",%HWND,"",3,L#) StatusWindow erzeugen
SetText Sz&, 0, " Zeile:" Feld1 mit Text bestücken
SetText Sz&, 1, " Spalte:" Feld2 mit Text bestücken
SetText Sz&, 2, Date$(0) Feld3 mit Text bestücken
---------------------------------------------------------------------
SETFOCUS(%HWND)
REPAINT
SubClass RICHEDIT1&,1
WHILENOT ENDE%
WAITINPUT
If %KEY=2
ENDE% = 1
ELSEIF %KEY=4
SETWINDOWPOS Sz& = 0,0 - 0,0;0
ELSEIF CLICKED(RICHEDIT1&)RICHEDIT
ELSEIF CLICKED(BUTTON1&)BUTTON Cursor Position
position
ELSEIF CLICKED(BUTTON2&)BUTTON Prog. Ende
ENDE% = 1
ENDIF
position
ENDWHILE
Dispose CharRange#
SubClas RICHEDIT1&, 0
End
|
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 21.03.2010 ▲ |
| |
| | Manfred Barei | Danke Detlef, so funktioniert es.
Saluto Manfred |
| | | Zu wenig Wissen ist gefärlich, zu viel auch.(XProfan X4) | Win 10 Pro 64 | Win7 Ultimate 32/64 | AMD FX-8320, 16GB, GeForce GT 630 | | 21.03.2010 ▲ |
| |
|
AnswerThemeninformationenDieses Thema hat 3 subscriber: |