Hi,
ein TGLCadencer ist eigentlich nur ein Thread mit sehr geringer Priorität. Deswegen wirst du mit dem Rendern auch kein Glück haben, solange du das gleich in Behandlung des Mausereignis machst. Da kommen dann einfach recht viele Events, die total vorrangig bearbeitet werden.
Lager einfach mal alles in das Ereignis des Cadencers aus:
Delphi-Quellcode:
procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
begin
newX := X;
newY := Y;
end; // if ssLeft in Shift
end;
procedure doFoo;
begin
glsceneviewer1.Camera.RotateAbsolute(newY-startpos.Y, newX-startpos.X, 0);
startpos.X := newX;
startpos.Y := newY;
mouse.cursorpos := glsceneviewer1.clienttoscreen(Point(Width div 2, Height div 2));
end;
procedure TGLCadencer.On(weißleider nicht genau und hab's gerade nicht installiert);
begin
// natürlich auch ein flag verwenden, dass der hier nur rein geht wenn die Maus gedrückt wurde!
if (newX <> startPos.X) or (newY <> startPos.Y) then
begin
doFoo;
end; // if (newX <> startPos.X) or (newY <> startPos.Y)
// ....
end;
Gruß Der Unwissende