| |
|
|
- Seite 1 - |
|
RudiB. | Hallo zusammen,
habe mal wieder etwas... beim scrollen über das Control VSroll bleiben sehr oft die Zeilen nicht "im Raster". Keine Ahnung wie ich es sonst ausdrücken soll.
Kann man das irgendwie fixen, das die Zeilen "im Raster bleiben" und nicht nur die Hälfte angezeigt wird (oberste Zeile !!) |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
Georg Teles | Guten Morgen,
bin seit einem Jahr raus aus der Programmierung. Habe zwecks Style nichts passendes gefunden, nur Workarounds welche die "Justierung der Zeile" nachträglich vornehmen ... als Denkanstoß hier ein kleines Beispiel, umständlich, ist aber vllt nützlich: (bei Edit und Control erst hineinklicken, dann dessen VScroll betätigen weil Focus/Child, kann sodann mit ProcAddr verbessert werden)
Cls
var text$ = GenTxt()
Declare pre_pos&
Proc GenTxt
Declare tx$
tx$ = ""
WhileLoop 0,200
tx$ = tx$+"Text_"+Str$(&loop)+"\n"
EndWhile
tx$ = tx$+"ENDE"
Return tx$
EndProc
locate 0,0
print "RichEdit"
locate 0,27
print "Edit (Control)"
locate 0,54
print "VScroll"
var red& = Create("richedit", %hWnd, text$, 5, 25, 200, 200)
var red2& = Control("Edit", "", $50200044, 205, 25, 200, 200, %hWnd, 0, %hInstance)
var vsc& = Create("VScroll",%hWnd,"",422,25,20,200)
'ACHTUNG Dimension der VScroll beachten ! am Besten nach Zeilen minus Sichtbare Zeilen
'SetScrollRange vsc&,0,190
'$00BA 'em_GetLineCount - Sichtbare Zeilen (hier 11)
SetScrollRange vsc&,0,SendMessage(red&,$00BA,0,0)-11
SetText red&,Text$
SetText red2&,Text$
While 1=1
Waitinput
'Falls Focus auf VScroll
If GetFocus(vsc&)
SendMessage(red&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
SendMessage(red2&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
pre_pos& = GetScrollPos(vsc&)
locate 3,57
print "GoTO Line "+Str$(pre_pos&)+Space$(3)
EndIf
'Falls Focus auf RichEdit
If GetFocus(red&)
SendMessage(red&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
SendMessage(red2&,$00B6,0,SendMessage(red&,$00CE,0,0)-pre_pos&)
pre_pos& = SendMessage(red&,$00CE,0,0)
SetScrollPos vsc&, pre_pos&
locate 3,57
print "GoTO Line "+Str$(pre_pos&)+Space$(3)
EndIf
'Falls Focus auf ControlEDIT
If GetFocus(red2&)
SendMessage(red2&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
SendMessage(red&,$00B6,0,SendMessage(red2&,$00CE,0,0)-pre_pos&)
pre_pos& = SendMessage(red2&,$00CE,0,0)
SetScrollPos vsc&, pre_pos&
locate 3,57
print "GoTO Line "+Str$(pre_pos&)+Space$(3)
EndIf
endwhile
Grüße |
|
|
| |
|
|
|
|
RudiB. | noch ein kleiner Nachtrag... das ist nur bei einem Richedit so, im Multiedit funktioniert das scrollen wirklich Zeilenweise. Ich brauche das aber auch im Richedit so... |
|
|
| |
|
|
|
Georg Teles | Guten Morgen,
bin seit einem Jahr raus aus der Programmierung. Habe zwecks Style nichts passendes gefunden, nur Workarounds welche die "Justierung der Zeile" nachträglich vornehmen ... als Denkanstoß hier ein kleines Beispiel, umständlich, ist aber vllt nützlich: (bei Edit und Control erst hineinklicken, dann dessen VScroll betätigen weil Focus/Child, kann sodann mit ProcAddr verbessert werden)
Cls
var text$ = GenTxt()
Declare pre_pos&
Proc GenTxt
Declare tx$
tx$ = ""
WhileLoop 0,200
tx$ = tx$+"Text_"+Str$(&loop)+"\n"
EndWhile
tx$ = tx$+"ENDE"
Return tx$
EndProc
locate 0,0
print "RichEdit"
locate 0,27
print "Edit (Control)"
locate 0,54
print "VScroll"
var red& = Create("richedit", %hWnd, text$, 5, 25, 200, 200)
var red2& = Control("Edit", "", $50200044, 205, 25, 200, 200, %hWnd, 0, %hInstance)
var vsc& = Create("VScroll",%hWnd,"",422,25,20,200)
'ACHTUNG Dimension der VScroll beachten ! am Besten nach Zeilen minus Sichtbare Zeilen
'SetScrollRange vsc&,0,190
'$00BA 'em_GetLineCount - Sichtbare Zeilen (hier 11)
SetScrollRange vsc&,0,SendMessage(red&,$00BA,0,0)-11
SetText red&,Text$
SetText red2&,Text$
While 1=1
Waitinput
'Falls Focus auf VScroll
If GetFocus(vsc&)
SendMessage(red&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
SendMessage(red2&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
pre_pos& = GetScrollPos(vsc&)
locate 3,57
print "GoTO Line "+Str$(pre_pos&)+Space$(3)
EndIf
'Falls Focus auf RichEdit
If GetFocus(red&)
SendMessage(red&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
SendMessage(red2&,$00B6,0,SendMessage(red&,$00CE,0,0)-pre_pos&)
pre_pos& = SendMessage(red&,$00CE,0,0)
SetScrollPos vsc&, pre_pos&
locate 3,57
print "GoTO Line "+Str$(pre_pos&)+Space$(3)
EndIf
'Falls Focus auf ControlEDIT
If GetFocus(red2&)
SendMessage(red2&,$00B6,0,GetScrollPos(vsc&)-pre_pos&)
SendMessage(red&,$00B6,0,SendMessage(red2&,$00CE,0,0)-pre_pos&)
pre_pos& = SendMessage(red2&,$00CE,0,0)
SetScrollPos vsc&, pre_pos&
locate 3,57
print "GoTO Line "+Str$(pre_pos&)+Space$(3)
EndIf
endwhile
Grüße |
|
|
| |
|
|
|
RudiB. | Hallo Georg,
... danke, das ist, glaube ich die Lösung. Muss ich in Ruhe ausprobieren. Aber auf den ersten Blick genau das richtige, was ich gesucht habe. Ich probiere das heute Abend mal für meinen Fall aus und gebe dann Feedback.
Gruß Rudi |
|
|
| |
|
|
|
RudiB. | ...schon ausprobiert.... TREFFER....
Danke Georg, das wars...
Gruß aus München Rudi |
|
|
| |
|
|
|
Georg Teles | Guten Abend, na wunderbar
Grüße |
|
|
| |
|
|