![]() |
TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Hallo,
ich verwende folgenden Code um ein Bitmap von einem Image in ein anderes mittels DrapDrop zu verschieben:
Delphi-Quellcode:
Ich hab festgestellt, dass immer DragDrop aktiv ist, auch wenn ein Image
procedure TSymboleForm.Image_DragDrop(Sender, Source: TObject; X,
Y: Integer); var S : String; i : Integer; Taste_Sender: String; Taste_Source: String; begin If Sender is TImage then begin //kommt das Drag vom TImage? If Source is TImage then begin //ausgewähltes Bild vom sendenden Image laden TImage(Sender).Picture.Assign(TImage(Source).Picture); //Bild im sendenden Image löschen TImage(Source).Picture.Bitmap := nil; //Variablen beschreiben Taste_Sender := Imagenamen_aendern(TImage(Sender).Name); Taste_Source := Imagenamen_aendern(TImage(Source).Name); with FEinAusgabe_StringList_Tasten do begin //Index der Taste auslesen i := IndexOfName(Taste_Source); //Taste in Liste vorhanden? If i > -1 then begin //Dateinamen aus Liste lesen S := ValueFromIndex[i]; //Eintrag löschen Delete(i); end; end; end; end; end; procedure TSymboleForm.Image_DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin //Drag akzeptieren wenn es von TShellListView oder TImage kommt //Wenn Sender und Source das gleiche Image sind (Bild wird wieder zurück- //bewegt, dann Accept = false Accept := (Source is TShellListView) or ((Source is TImage) and not (Sender = Source)); end; kein Bild enthält. Wie kann ich das Abfragen ob in einem TImage kein Bild drin ist und damit das DragDrop deaktivieren kann? |
Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Delphi-Quellcode:
Picture.Bitmap.Empty
|
Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Zitat:
|
Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
In Zeile 13 die Bedingung erweitern.
|
Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Delphi-Quellcode:
wird aber erst ausgeführt, wenn ich das Bitmap auf dem anderen Image ablegen will.
procedure TSymboleForm.Image_DragDrop(Sender, Source: TObject; X, Y: Integer);
Nur wie kann ich es schon früher abfangen ob das Bitmap leer ist, damit nicht einmal der Cursor anders angezeigt wird? Ich dacht mir im MouseDown des Image prüfen ob es leer ist, und dann den DragMode umschalten |
Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Moin,
ich würde es etwa so machen:
Delphi-Quellcode:
Der Trick ist die Rekonfiguration von DragMode, ob du es über die ApplicationEvents machst ist zweitrangig.
procedure TDemoForm.ApplicationEventsIdle(Sender: TObject;
var Done: Boolean); begin with SourceImage do DragMode := TDragMode(not Picture.Bitmap.Empty); Done := True; end; Grüße vom marabu |
Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Ich habs jetzt so gelöst:
Delphi-Quellcode:
procedure TSymboleForm.Image_DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean); var Bitmap_leer: Boolean; begin // If Source is TImage then Bitmap_leer := TImage(Source).Picture.Bitmap.Empty; //Drag akzeptieren wenn es von TShellListView oder TImage kommt //Wenn Sender und Source das gleiche Image sind (Bild wird wieder zurück- //bewegt, dann Accept = false //Wenn Original-Bitmap leer ist, dann Accept = false Accept := ((Source is TShellListView) or ((Source is TImage) and not (Sender = Source)) and not Bitmap_leer); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz