Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Element während Drag 'n Drop anzeigen (https://www.delphipraxis.net/79218-element-waehrend-drag-n-drop-anzeigen.html)

bwolf 18. Okt 2006 11:43


Element während Drag 'n Drop anzeigen
 
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

Hawkeye219 18. Okt 2006 18:19

Re: Element während Drag 'n Drop anzeigen
 
Hallo Ben,

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

Gruß Hawkeye

yankee 18. Okt 2006 18:24

Re: Element während Drag 'n Drop anzeigen
 
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.

bwolf 19. Okt 2006 08:43

Re: Element während Drag 'n Drop anzeigen
 
Danke schonmal für eure Antworten!
Werde mir das Tut mal reinfatzen, scheint ja sehr umfangreich zu sein :cyclops:

@Yankee
Jo, geht um Laufzeit.

bwolf 19. Okt 2006 10:38

Re: Element während Drag 'n Drop anzeigen
 
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.
Delphi-Quellcode:
 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.
Delphi-Quellcode:
 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

Khabarakh 19. Okt 2006 10:57

Re: Element während Drag 'n Drop anzeigen
 
Du hast die CLX-Unit QControls eingebunden. Weg damit ;) .

yankee 19. Okt 2006 11:25

Re: Element während Drag 'n Drop anzeigen
 
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....

bwolf 19. Okt 2006 11:52

Re: Element während Drag 'n Drop anzeigen
 
Zitat:

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.

_frank_ 19. Okt 2006 12:53

Re: Element während Drag 'n Drop anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

Khabarakh 19. Okt 2006 14:26

Re: Element während Drag 'n Drop anzeigen
 
Zitat:

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 ;) ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 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