| |
|
|
Timotheus | Hallo,
Ich bin neu hier, und habe ein Problem.
Ich habe eine MultieditBox per Control mit einem waagerechten Scrollbalken erzeugt. Dann habe ich mir den anderen selbst dran gebastelt, und auf den möchte ich dann reagieren. Jetzt muss ich aber wissen ob der Cursor in der Medit am Anfang, am Ende oder ganz wo anders steht, weil ich ja den Scrollbalken größer oder kleiner machen muss, wenn jemand die Entfernen Taste auf der letzten Position drückt, oder auf der ersten die Rückgängig Taste.
Wie krieg ich das raus?
Timo |
|
|
| |
|
|
|
Michael Dell | Hi,
das Multiedit erzeugt den gewünschten Scrollbalken selbst, allerdings erst wenn er benötigt wird!
Du brauchst also keinen extra.
Demo:
declare med01&
cls
med01& = @Create("MultiEdit",%HWnd,"",20,20,600,400)
SetFocus(med01&)
SendKey(med01&,35)
Sleep 1000
WhileLoop 0,30,1
SendString(med01&,"Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 ")
SendString(med01&,"Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2{ENTER}")
EndWhile
SendString(med01&,"{ENTER}Test- Beendet!!!!{ENTER}")
WhileNot Equ(%Key,2) Or Equ(%Key,27)
WaitInput
EndWhile
End
Gruß
Michael |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 28.08.2004 ▲ |
|
|
|
|
Timotheus | Hallo Michael,
Mit der MultiEdit gehts ja nicht, weil ich möchte den rechten Scrollbalken selber erzeugen, damit ich auf ihn reagieren kann, und das geht glaube ich nur mit Control. Und der ScrollB muss der sich ja auch ganz normal verhalten können, und deshalb muss ich alles was Windows sonst macht, selber machen !
Und wie bekomme ich das mit der ersten und letzten Position raus?
Timo |
|
|
| |
|
|
|
Michael Dell | Hallo Timotheus,
du kannst auch per SendMessage die Cursor- Position ermitteln und es gibt auch Messages für die Scrollbalken.
Cursorpos im MultiEdit: (Autor: Uwe „Pascal“ Niemeier [...] )
**********************************
window 50,50-500,300
declare Edit%,Zeile%,Zeichen%,Gesamt&
let Edit%=createmultiedit(%hwnd,"",50,50,200,200)
while 1
getmessage
sendmessage(Edit%,176,addr(Gesamt&),0)
locate 1,1
let Zeichen%=sub(Gesamt&,sendmessage(Edit%,187,-1,0))
let Zeile%=sendmessage(Edit%,201,-1,0)
locate 1,1
print "Der Cursor befindet sich hinter Zeichen",Zeichen%,"in Zeile",Zeile%," "
endwhile
**********************************
Hier ein Thread der dir auch noch helfen kann: [...]
Gruß
Michael |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 28.08.2004 ▲ |
|
|
|
|
Timotheus | Danke,
das ist genau das was ich meinte!
Aber könntest du auch noch diese Scrollbalken Messages schreiben. Weil dann bräuchte ich auch nicht alles selbst machen, und könnte einfach den rechten Scrollbalken abfragen.
Timo |
|
|
| |
|
|
|
Michael Dell | Da gibst bereits ein schönes Beispiel aus Andreas Miethes - Control.hlp:
Scroll- Beipiel aus Control.hlp
Autor: Andreas Miethe
HP: http://www.ampsoft.de (Control.exe)
Scroll- Messages
NAME WERT PARAMETER
SBM_SETPOS $00E0 N3 = Position , N4 = Neuzeichnen ja(1) oder nein(0)
SBM_GETPOS $00E1 N3=0, N4=0
SBM_SETRANGE $00E2 N3=Minimum , N4=Maximum
SBM_SETRANGEREDRAW $00E6
SBM_GETRANGE $00E3 N3=Minimum , N4=Maximum
SBM_ENABLE_ARROWS $00E4
SBM_SETSCROLLINFO $00E9
SBM_GETSCROLLINFO $00EA
Declare Ende%,ScrollHorz%,Scrollvert%,Button%
Declare ScrollHX%,ScrollHY%,ScrollWX%,ScrollWY%
Declare ButtonrangeX%,ButtonrangeY%
Declare Buttonx%,Buttony%,Buttonh%,Buttonw%
settruecolor 1
cls rgb(192,192,192)
Let Buttonx% = 10 links oben
Let Buttony% = 60 rechts oben
Let Buttonh% = 24 Hoehe
Let Buttonw% = 80 Breite
Let ButtonrangeX% = sub(width(%hwnd),130) bis hierhin darf sich der Button in X bewegen
Let ButtonrangeY% = sub(height(%hwnd),30) bis hierhin darf sich der Button in Y bewegen
Let ScrollHX% = 0 links Scrollbar Horizontal
Let ScrollHY% = sub(Width(%hwnd),20) Breite Scrollbar Horizontal
Let ScrollWX% = sub(Width(%hwnd),20) oben Scrollbar Vertikal
Let ScrollWY% = sub(Height(%hwnd),20) Hoehe Scrollbar Vertikal
Let ScrollHorz% = @Control("Scrollbar","",$50000000,0,0,ScrollWX%,20,%hwnd,1000,%Hinstance)
Let ScrollVert% = @Control("Scrollbar","",$50000001,ScrollHY%,20,20,ScrollWY%,%hwnd,1001,%Hinstance)
Let Button% = @Control("Button","Ende",$50008000,Buttonx%,Buttony%,Buttonw%,Buttonh%,%hwnd,1002,%Hinstance)
Sendmessage(ScrollHorz%,$00E2,ButtonX%,ButtonrangeX%) Scrollweite für Scrollbar horizontal
Sendmessage(ScrollVert%,$00E2,ButtonY%,ButtonrangeY%) Scrollweite für Scrollbar vertikal
Let ende%=0
whilenot ende%
Waitinput
if getfocus(Button%)
Let Ende%=1
Endif
Buttonposition anpassen
setwindowpos Button% = Sendmessage(ScrollHorz%,$00E1,0,0),Sendmessage(Scrollvert%,$00E1,0,0)-80,24;0
wend
End
© Andreas Miethe , Bielefeld , 1998
Hier wird ein Button mittels Scrollbalken verschoben!
Wo du die Control.hlp findest steht im Beispiel wie auch die gewünschten Messages.
P.S.: Wenn du mal wieder Beipiele suchts eine tolle sortierte Linkliste findest du hier: [...]
Sodele. Hoffe das hilft!
Schönen Sonntag Euch allen...
Michael |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 29.08.2004 ▲ |
|
|
|
|
Timotheus | Das ist nicht ganz das was ich suche. Eigentlich weiß ich jetzt schon alles. Aber gibt es eine Möglichkeit den rechten Scrollbalken in einer Multiedit(oder Control) abzufragen? Dann bräuchte ich nicht immer alles abzufragen und zu positionieren wenn in der Multiedit etwas eingegeben wird
Timo |
|
|
| |
|
|
|
Michael Dell | Ok,
und nochn Beispiel:
Autor: Michael Dell
ScrollBar Min, Max und Pos Info
Def gScrollPos(2) !"user32.dll","GetScrollPos"
Def gScrollRange(4) !"user32.dll","GetScrollRange"
Declare med01&,scrMin&,scrMax&
Aktuelle Position des Scrollbalken
gScrollPos(hndl&,0) SB_HORZ = 0
gScrollPos(hndl&,1) SB_VERT = 1
Proc gScrollMinMax
Min und Max der Scrollbar ermittel
Parameters hndl&,HorVer% HorVer%=0 -> Horizontal / HorVer%=1 -> Vertikal
gScrollRange(hndl&,HorVer%,Addr(scrMin&),Addr(scrMax&))
EndProc
Proc ZeigeScrollMinMaxPos
Parameters HorVer%
gScrollMinMax(med01&,HorVer%)
If HorVer%
MessageBox(Add$(Add$(Add$("Min=",Str$(scrMin&)),Add$(" Max=",Str$(scrMax&))),Add$(" Pos=",Str$(gScrollPos(med01&,HorVer%)))),"Vertikal (Min Max Pos):",0)
Else
MessageBox(Add$(Add$(Add$("Min=",Str$(scrMin&)),Add$(" Max=",Str$(scrMax&))),Add$(" Pos=",Str$(gScrollPos(med01&,HorVer%)))),"Horizontal (Min Max Pos):",0)
EndIf
SetFocus(med01&)
EndProc
cls
med01& = @Create("MultiEdit",%HWnd,"",20,20,600,400)
SetFocus(med01&)
SendKey(med01&,35)
WhileLoop 0,30,1
SendString(med01&,"Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 Test1 ")
SendString(med01&,"Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2{ENTER}")
EndWhile
SendString(med01&,"{ENTER}Test- Beendet!!!!{ENTER}")
ZeigeScrollMinMaxPos 0
ZeigeScrollMinMaxPos 1
WhileNot Equ(%Key,2) Or Equ(%Key,27)
WaitInput
ZeigeScrollMinMaxPos 0
ZeigeScrollMinMaxPos 1
EndWhile
End
Sodele, das wärs... :-P
Michael |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 29.08.2004 ▲ |
|
|
|
|
Timotheus | Ich habe noch eine neue Frage, und ich denke das sie auch hier rein zu den letztn Fragen past:
Wie kriege ich die Zeilennummer der obersten Zeile die in einer Multiedit zu sehen ist raus?
Timo |
|
|
| |
|
|
|
| Hallo Timotheus...
So vielleicht?
Windowstyle 31
Windowtitle "Erste sichtbare Zeile im Multiedit"
Window 0,0-640,440
Declare EDIT&,Button&,Zeile&
LET EDIT&=@createmultiedit(%HWND,"",10,10,300,300)
LET BUTTON&=@CREATEBUTTON(%HWND,"Erste sichtbare Zeile?",10,330,300,30)
ADDFONTS
@Movelisttoedit(EDIT&)
While 0=0
Waitinput
IF @GETFOCUS(Button&)
LET ZEILE&=@SENDMESSAGE(EDIT&,$00CE,0,0) Index der Zeile erfragen
@MESSAGEBOX(@ADD$("Erste sichtbare Zeile: ",@STR$(@int(ZEILE&+1))),"Ergebnis",64)
ENDIF
wend
|
|
|
| |
|
|
|
Michael Dell | Hi Leute,
ausgehend von meinem letzten Beispiel, (Maximale Zeilenzahl + 1) - ScrollbalkenPos. Da der Scrollbalken auch in seiner Größe dem Anzeigbaren Bereich im Verhältnis zum gesamten Inhalt entspricht.
Gruß Michael... |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 26.09.2004 ▲ |
|
|
|
|
Timotheus | |
|
| |
|
|