Alle LCL Komponenten müssten eigentlich onDragOver und onDragDrop unterstützten, und Speedbutton ist abgeleitet von TCustomSpeedButton von TGraphicControl von TControl, und da gibt es selbstverständlich
Code: Alles auswählen
Protected
...
property OnDragOver: TDragOverEvent read FOnDragOver write FOnDragOver;
...
und die Doku zu Protected meint: "the members of a Protected section are also accessible to descendent types, even if they are implemented in other modules.". Schaut doch alles gut aus.
Dennoch scheitert dieser Code:
Code: Alles auswählen
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure SpeedButton1DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
private
public
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i := 1 to 8 do
ListBox1.AddItem(Format('Item %d',[i]),nil);
SpeedButton1.OnDragOver:=@SpeedButton1DragOver;
end;
Wie üblich begann die Odyssee mit einer Frage (wie bekomme ich Drag'n'Drop mit einem Speedbutton) und endet bei der Originalfrage plus vier Zusatzfragen:
- wie ist es möglich, diese beiden Properties in den abgeleiteten Klassen verschwinden zu lassen, und zwar nicht nur aus der GUI sondern überhaupt
- warum hat der Speedbutton kein Drag'n'Drop, ist das etwa Absicht?
- warum kann ich meinen Handler nicht wenigstens per Code zuweisen, und endlich:
- ist es möglich, die Drag'n'Drop Funktionalität auf anderem Weg an den Speedbutton zu kleben.
Armin