Home » Tipps & Tricks » Komponenten » Buttons » Bugs in TSpeedButton beheben
Bugs in TSpeedButton beheben
Beim Einsatz der Komponente TSpeedButton im Flat-Style kann es passieren, dass sie sich bei schnellem Überfahren mit der Maus nicht mehr in den Flachzustand zurück begibt. Folgender Code behebt diesen Bug: In der Unit Buttons.pas müssen unter TSpeedButton.MouseUp diese Zeilen eingefügt werden:
if FDown then FState := bsExclusive; Repaint; end; + if FFlat and Enabled then + begin + GetCursorPos(P); + FMouseInControl := FindDragTarget(P, True) Self; + if FMouseInControl and not FDragging then + begin + FMouseInControl := False; + Invalidate; + end; + end; end; end;
Datei Forms.pas in TApplication.DoMouseIdle:
CaptureControl: TControl; P: TPoint; + ParentForm: TCustomForm; begin GetCursorPos(P); Result := FindDragTarget(P, True); + if (Result nil) and (Result is TGraphicControl) then + begin + ParentForm := GetParentForm(Result); + if ParentForm nil then + begin + P := ParentForm.ScreenToClient(P); + if not PtInRect(ParentForm.ClientRect, P) then + Result := nil; + end; + end; + if (Result nil) and (csDesigning in Result.ComponentState) then Result := nil;
Anschließend muss die VCL neu kompiliert werden. Wer ohne Packages auskommt, braucht nur die Dateien Buttons.pas und Forms.pas neu kompilieren, da sich nichts am Interface geändert hat:
cd DelphiSourceVCL dcc32 -U....LibDebug -N....LibDebug -R....Lib Forms.pas dcc32 -U....LibDebug -N....LibDebug -R....Lib Buttons.pas dcc32 -$D- -U....Lib -N....Lib -R....Lib Forms.pas dcc32 -$D- -U....Lib -N....Lib -R....Lib Buttons.pas