AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TImage: DragDrop nur ausführen, wenn Bitmap vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

Ein Thema von Helmi · begonnen am 16. Aug 2008 · letzter Beitrag vom 16. Aug 2008
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 11:22
Hallo,

ich verwende folgenden Code um ein Bitmap von einem Image in ein anderes mittels DrapDrop zu verschieben:
Delphi-Quellcode:
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;
Ich hab festgestellt, dass immer DragDrop aktiv ist, auch wenn ein Image
kein Bild enthält.

Wie kann ich das Abfragen ob in einem TImage kein Bild drin ist und damit
das DragDrop deaktivieren kann?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 11:32
Picture.Bitmap.Empty
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#3

Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 11:36
Zitat von Blackheart:
Picture.Bitmap.Empty
und wo muss ich das einfügen damit dragdrop gar nicht erst ausgeführt wird?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 11:40
In Zeile 13 die Bedingung erweitern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#5

Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 11:49
procedure TSymboleForm.Image_DragDrop(Sender, Source: TObject; X, Y: Integer); wird aber erst ausgeführt, wenn ich das Bitmap auf dem anderen Image ablegen will.

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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 12:53
Moin,

ich würde es etwa so machen:

Delphi-Quellcode:
procedure TDemoForm.ApplicationEventsIdle(Sender: TObject;
  var Done: Boolean);
begin
  with SourceImage do
    DragMode := TDragMode(not Picture.Bitmap.Empty);
  Done := True;
end;
Der Trick ist die Rekonfiguration von DragMode, ob du es über die ApplicationEvents machst ist zweitrangig.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#7

Re: TImage: DragDrop nur ausführen, wenn Bitmap vorhanden

  Alt 16. Aug 2008, 16:44
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;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz