ich habe heute mal alle stellen die ich für Intresannt fand in der LazarusRichView zusammen Getragen... ich hoffe ihr könnt sie mir etwas genauer beschreiben....
Weil ich steige da einfach nicht durch... weil es auch mit Mahte zu tuen hat...
Code: Alles auswählen
procedure TRichView.Format_(OnlyResized:Boolean; depth: Integer; Canvas: TCanvas;
OnlyTail: Boolean);
var i: Integer;
x,b,d,a: Integer;
mx : Integer;
oldy, oldtextwidth, cw, ch: Integer;
sad: TScreenAndDevice;
StyleNo: Integer;
StartLine: Integer;
StartNo, EndNo, StartOffs, EndOffs: Integer;
begin
if smallstep = 0 then exit;
if (csDesigning in ComponentState) or
not Assigned(FStyle) or
skipformatting or
(depth>1)
then exit;
skipformatting := True;
if depth=0 then StoreSelBounds(StartNo, EndNo, StartOffs, EndOffs);
OldY := VPos*SmallStep;
oldtextwidth := TextWidth;
mx := max(ClientWidth-(FLeftMargin+FRightMargin), GetMaxPictureWidth);
if mx<FMinTextWidth then mx := FMinTextWidth;
if FClientTextWidth then begin { widths of pictures and maxtextwidth are ignored }
TextWidth := ClientWidth-(FLeftMargin+FRightMargin);
if TextWidth<FMinTextWidth then TextWidth := FMinTextWidth;
end
else begin
if (mx > FMaxTextWidth) and (FMaxTextWidth>0) then
TextWidth := FMaxTextWidth
else
TextWidth := mx;
end;
if not (OnlyResized and (TextWidth=OldTextWidth)) then begin
if OnlyTail then begin
StartLine := LastLineFormatted+1;
b:= TextHeight;
end
else begin
StartLine := 0;
b := 0;
ClearTemporal;
end;
x:=0;
d:=0;
InfoAboutSaD(sad, Canvas);
sad.LeftMargin := MulDiv(FLeftMargin, sad.ppixDevice, sad.ppixScreen);
for i:=StartLine to lines.Count-1 do begin
StyleNo := TLineInfo(Lines.Objects[i]).StyleNo;
if not (((StyleNo = rvsPicture) and (not (rvdoImages in DisplayOptions))) or
((StyleNo = rvsComponent)and(not (rvdoComponents in DisplayOptions))) or
(((StyleNo = rvsBullet) or (StyleNo = rvsHotspot))and(not (rvdoBullets in DisplayOptions)))) then
FormatLine(i,x,b, d,a, Canvas, sad);
end;
TextHeight := b+d+1;
if TextHeight div SmallStep > 30000 then
SmallStep := TextHeight div 30000;
AdjustJumpsCoords;
end
else
AdjustChildrenCoords;
HPos := 0;
VPos := 0;
cw := ClientWidth;
ch := ClientHeight;
UpdateScrollBars(mx+FLeftMargin+FRightMargin, TextHeight div SmallStep);
if (cw<>ClientWidth) or (ch<>ClientHeight) then begin
skipformatting := False;
ScrollTo(OldY);
Format_(OnlyResized, depth+1, Canvas, False);
end;
if OnlyResized then ScrollTo(OldY);
if OnlyTail then ScrollTo(TextHeight);
if depth=0 then RestoreSelBounds(StartNo, EndNo, StartOffs, EndOffs);
skipformatting := False;
LastLineFormatted := Lines.Count-1;
end;
// Hier finde ich es überraschend das die Gerbete methode von Custum Controll aufgerufen wird.
denn TRichView ist von TRVScroller abgeleitet das wiederum von TCustumControll stammt.
Dort wird aber MoveMove gar nicht verwendet...
procedure TRichView.MouseMove(Shift: TShiftState; X, Y: Integer);
var i, no, offs,ys: Integer;
begin
ScrollDelta := 0;
if Y<0 then ScrollDelta := -1;
if Y<-20 then ScrollDelta := -10;
if Y>ClientHeight then ScrollDelta := 1;
if Y>ClientHeight+20 then ScrollDelta := 10;
inherited MouseMove(Shift, X, Y);
Was bedeutet die zahl: 30000 immer wieder ?
Meine Suche im Internet hat ergeben das es eine Textbegrenzung unter win 95 und 98 gab das heiß es konnten nur 30000 Zeichen geladen werden... ist das hier auch der Fall ?
SmallStep wird mit 10 Installisiert.....
Ich habe es selber noch mal versucht und bin zu den Schluss gekommen, das ich ein Mindens wert brauche z.b. 20 Pixel ist eine Zeile hoch.... und um die wird gescrollt.
Wenn eine Komponente meine Scrollbox nutzt muss sie halt diesen Wert ändern/anpassen..
Leider müsste ich disese 20 Pixel natürlich irgendwie anpassen....
Und das ist im Moment das Problem. Ich dachte das währe Mischung Rechnen.. .Weil mit Prozent komme ich nicht weiter... der Wert Passt nicht.
Es währe toll wenn ich/wir dieses Problem endlich gelöst hätten.
PS: ich hoffe das ist inordnung das ich die Code stellen gepostet habe, weil das Projekt ist ja sowieso OpenSoruce.... ich meine jetzt TRichView