AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Element während Drag 'n Drop anzeigen

Ein Thema von bwolf · begonnen am 18. Okt 2006 · letzter Beitrag vom 19. Okt 2006
Antwort Antwort
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Element während Drag 'n Drop anzeigen

  Alt 18. Okt 2006, 12:43
Hi all,

ich glaube zwar das ähnliches schon öfters gefragt wurde, hab aber auch nach längerem suchen nix gefunden - deshalb traue ich mich nochmal zu fragen

Also ich will einen Button (oder was für ein Object auch immer) per Drag and Drop verschieben.
Allerdings möchte ich, das der Button und seine Beschriftung dabei sichtbar bleiben, der Cursor sich also nicht in den Standardcursor ändert. (Sehr cool wärs natürlich, wenn so wie bei Windows ist, wenn man ein Icon auf dem Desktop verschiebt, das Icon Halbtransparent wird...)

Kann mir einer dazu nen Lösungsansatz oder nen Link verraten ?

Danke schonmal,
gruß ben
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Element während Drag 'n Drop anzeigen

  Alt 18. Okt 2006, 19:19
Hallo Ben,

ich habe es nicht getestet, aber vielleicht findest du in diesem Artikel den gesuchten Lösungsansatz.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#3

Re: Element während Drag 'n Drop anzeigen

  Alt 18. Okt 2006, 19:24
Geht es um die Delphi-IDE, oder zur Laufzeit? .
Ich denke mal Laufzeit, wenn ich das Forum bedenke...

Wie wäre es mit im OnMouseDown die Mausposition festhalten und das Vershcieben aktivieren.
Im OnMouseMove dann immer errechenen, um wieviel sich die Mausposition verschoben hat und dein Objekt um die gleiche Zahl verschieben.
Im OnMouseUp das verschieben wieder dektivieren.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 09:43
Danke schonmal für eure Antworten!
Werde mir das Tut mal reinfatzen, scheint ja sehr umfangreich zu sein

@Yankee
Jo, geht um Laufzeit.
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 11:38
Also indiesem Artikel ist ein Beispiel, wie man eine eigene Komopnente erstellen kann, die dann während der Drag&Drop-Aktion beim verschieben sichtbar ist.
Ich hab versucht das mal abzuschreiben, krieg allerdings 2 Fehler die ich nich beheben kann.

Hier mal der Source von der Komponente:

Delphi-Quellcode:
unit MyDragButton;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Graphics, Types, QControls;

type
  TMyDragButton = class(TButton)
  private
    FDragImages: TDragImageList;
  protected
    function GetDragImages: TDragImageList; override;
    procedure MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
  end;

procedure Register;

implementation


constructor TMyDragButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csDisplayDragImage];
end;

destructor TMyDragButton.Destroy;
begin
  FDragImages.Free;
  inherited;
end;

function TMyDragButton.GetDragImages: TDragImageList;
var
  Bmp: TBitmap;
  BmpIdx: Integer;
  Pt: TPoint;
begin
  if not Assigned(FDragImages) then
    FDragImages := TDragImageList.Create(Self);
  Bmp := TBitmap.Create;
  try
    Bmp.Width := Width;
    Bmp.Height := Height;
    Bmp.Canvas.Lock;
    try
      PaintTo(Bmp.Canvas.Handle, 0, 0);
    finally
      Bmp.Canvas.Unlock
    end;
    FDragImages.Width := Width;
    FDragImages.Height := Height;
    BmpIdx := FDragImages.AddMasked(Bmp, clBtnFace);
    //Where is mouse relative to control?
    GetCursorPos(Pt);
    Pt := ScreenToClient(Pt);
    //Specify drag image and hot spot
    FDragImages.SetDragImage(BmpIdx, Pt.X, Pt.Y);
    Result := FDragImages;
  finally
    Bmp.Free
  end
end;

procedure TDragButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  //Automatically start dragging on a Ctrl-click
  if ssCtrl in Shift then
    BeginDrag(True)
end;

procedure Register;
begin
  RegisterComponents('Samples', [TMyDragButton]);
end;

end.

Also 1.
 procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; Hier meint er, das die Dekleration von der vorherigen Deklaration abweicht.
Verstehe ich nicht ganz, da die Procedur in der Doku genau so drinsteht...

Und 2.
 ontrolStyle := ControlStyle + [csDisplayDragImage]; Meint er hier, 'incomatible types'.
Woran könnte das liegen ?


Wäre super wenn mir da noch einer auf die Sprünge helfen kann.

Danke im Vorraus,
gruß ben
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 11:57
Du hast die CLX-Unit QControls eingebunden. Weg damit .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#7

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 12:25
ich habe mal das gelcieh problem gehabt und ein kurzes verständliches beispiel im Swiss Delphicenter gefunden:
http://www.swissdelphicenter.ch/de/

leider finde ich den code nichtmehr...
Aber du könntest da ja mal suchen....
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 12:52
Zitat von Khabarakh:
Du hast die CLX-Unit QControls eingebunden. Weg damit .
Die brauche ich für die Prozedur GetCursorPos, und die QGraphics steht in der Delphi Docu auch in der VCL Reference...

Ich werd mal schauen ob ich das auf SwisDelphiCenter wieder finde, danke für den Hinweis.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#9

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 13:53
die TImageList stellt Methoden bereit um dragImages darzustellen.
wenn du dein Dragimage als Imagelist-kompatibles Bild vorliegen hast kannst du dies hinzufügen und per SetDragImage, ShowDragImage und HideDragImage die Anzeige steuern...

HTH

Gruß Frank
Angehängte Dateien
Dateityp: zip dragimages_881.zip (150,3 KB, 58x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Element während Drag 'n Drop anzeigen

  Alt 19. Okt 2006, 15:26
Zitat von bwolf:
Die brauche ich für die Prozedur GetCursorPos,
Delphi-Referenz durchsuchenTMouse.CursorPos
Zitat:
und die QGraphics steht in der Delphi Docu auch in der VCL Reference...
Hat jemand behauptet, eine Hilfe sei nie fehlerhaft ?
Sebastian
Moderator in der EE
  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 03:28 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