Discussion:
Lazarus: EInvalidCast auf TControl(Sender).MouseCapture := True;
(zu alt für eine Antwort)
M. Behrendt
2015-08-21 23:15:16 UTC
Permalink
[code]
type
TMoveCracker = class(TControl);

procedure TMainFrm.ControlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FDownX := X;
FDownY := Y;
FDragging := True;
TMoveCracker(Sender).MouseCapture := True;
end;
[/code]

ich bekomme in Lazarus v1.4 eine EInvalidCast in der Zeile
TMoveCracker(Sender).MouseCapture := True;

In TurboDelphi (unter WinXPPro 32) funktioniert dies, hier in Lazarus (unter Win8.1 Pro 64) nicht.

Ignoriere ich den Fehler kann trotzdem die Komponente draggen, wenn auch sehr hakelig aber es geht.

Den gleichen Fehler bekomme ich später beim loslassen wieder:
[code]
procedure TMainFrm.ControlMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if FDragging then
begin
TMoveCracker(Sender).MouseCapture := False;
FDragging := False;
end;
end;
[/code]

Habt Ihr eine Idee?
M. Behrendt
2015-08-23 18:11:05 UTC
Permalink
beantworte die Frage selbst per Link auf anderes Forum, siehe letzter Beitrag
http://forum.lazarus.freepascal.org/index.php?topic=15411.0

.MouseCapture ist protected in TControl, also muss man die Classe ableiten und .MouseCapture überschreiben

Komischerweise hat TurboDelphi damit kein Problem.
Allerdings hab ich die beiden Zeilen :=true; bzw. :=false; einfach auskommentiert und gut ist.
Loading...