Hi,
mal ganz off Topic und wegen Frust
Programmiert eigentlich irgendjemand eine ernstzunehmende Anwendung für den mobile Bereich mit Delphi? Ich bezweifle das mittlerweile bei den ganzen Basics die nicht funktionieren so langsam.
Also nun zum Thema
Wenn man ein Memo Feld auf eine VerticalScrollbox platziert und noch andere Elemente auf der Vertical Scrollbox hat, die Scrollbox also in der Theorie gescrollt werden können soll, dann verliert die Scrollbox diese Fähigkeit wenn ein MemoFeld auf ihr liegt und man versucht über das Memofeld zu scrollen.
Das memoFeld frist also das Scroll Event von der Scrollbox.
Mir ist schon klar, dass es wahrscheinlich damit zusammen hängt, dass das Memo selbst auch scrollbar ist, wenn es mehr text hat als es anzeigen kann, aber ich habe keinen direkten Weg gefunden wie ich das irgendwie einfach steuern könnte.
Wisst ihr weiter?
Ich bin aktuell folgende Lösung am Testen, aber nicht wirklich zufrieden, weil meine Form "Zuckt", funktionieren tut es aber zumindest schon mal.
Delphi-Quellcode:
procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
FPrevMousePosY := Y;
FPrevMousePosX := X;
end;
procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
var
lMemo: TCustomMemo;
lRect: TRectangle;
procedure ScrollVerticalby(_y: Single);
begin
lmemo.OnMouseMove := nil;
VertScrollBox1.ScrollBy(0,_y);
lmemo.OnMouseMove := Memo1MouseMove;
end;
begin
lMemo := Sender as TCustomMemo;
lRect := lMemo.Parent as TRectangle;
if not Assigned(lMemo.VScrollBar) then
ScrollVerticalby( Y - FPrevMousePosY)
else if not lMemo.VScrollBar.Visible then
begin
ScrollVerticalby( Y - FPrevMousePosY);
end
else if (lMemo.VScrollBar.Value = lMemo.VScrollBar.Max) or (lMemo.VScrollBar.Value = lMemo.VScrollBar.Min) then
ScrollVerticalby( Y - FPrevMousePosY);
FPrevMousePosY := Y;
FPrevMousePosX := X;
end;
procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
FPrevMousePosY := 0;
FPrevMousePosX := 0;
end;