AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Drag & Drop: DragCursor mit Bitmap statt Standard-Cursor
Thema durchsuchen
Ansicht
Themen-Optionen

Drag & Drop: DragCursor mit Bitmap statt Standard-Cursor

Ein Thema von Helmi · begonnen am 13. Mär 2009 · letzter Beitrag vom 14. Mär 2009
Antwort Antwort
Benutzerbild von Helmi
Helmi

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

Drag & Drop: DragCursor mit Bitmap statt Standard-Cursor

  Alt 13. Mär 2009, 19:54
Hallo,

ich habeine ShellListView und einige Images.
Von der ShellListView ziehe ich mittels Drag & Drop Bitmaps auf die Images.

Während des Ziehens wird der DragCursor angezeigt.
Nun würd ich gerne, a la Windows Vista, das Bitmap als Cursor-Bild anzeigen lassen?

Wie könnt ich das realisieren?
mfg
Helmi

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

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

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 13. Mär 2009, 20:20
Hallo Helmi,

hier ist etwas zum Lesen: klick

Gruß Hawkeye
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 13. Mär 2009, 20:25
Vielleicht nicht ganz seine Frage.
Delphi-Quellcode:
var
  hCurs : THandle;
  bmp : TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.LoadFromFile(PICTURE_FILE_NAME);
  hCurs := LoadImage(0, //Handle to Application - NULL when using stand-alone
                     PChar(PICTURE_FILE_NAME), //0-terminated String
                     IMAGE_BITMAP, //type
                     bmp.Width, //size of bmp
                     bmp.Height, //size of bmp
                     LR_LOADFROMFILE); //flag
  SetCursor(hCurs);
  bmp.Free;
end;
Dabei solltest du das Icon dessen welches du gerade Drag&Drops't als bmp zwischenspeichern - im Arbeitsspeicher oder kurz als Datei obwohl 1.-eres besser ist.
Schau dir dazu noch folgende Funktion aus der MSDN an. Da gibts auch andere Parameter, falls du es als Icon speicherst.

Code ist nicht getestet!
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 13. Mär 2009, 21:41
Danke für den Code.

Nur wie verarbeite ich den jetzt am Besten, damit ich als Cursor das Bitmap seh?

Ein OnStartDrag gibts ja leider nicht, wo ich den Cursor definieren und laden könnte.
mfg
Helmi

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

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 13. Mär 2009, 23:12
Sicher, die muss es geben. Sind ja schließlich von TControl.
OnStartDrag und OnDragDrop sind bei mir in D7 vorhanden.

Hab noch schnell eine bessere Variante geschrieben:
Delphi-Quellcode:
type
  PSHFILEINFO = ^SHFILEINFO;
  SHFILEINFO = record
    hIcon : HICON;
    iIcon : Integer;
    dwAttributes : DWORD;
    szDisplayName : array[0..255] of PChar;
    szTypeName : array[0..79] of PChar;
  end;

const
  SHGFI_ICON = $100;
  SHGFI_SMALLICON = $1;

function SHGetFileInfo(pszPath : PChar; dwFileAttributes : DWORD; psfi : PSHFILEINFO; cbFileInfo : DWORD; uFlags : DWORD) : PDWORD; external 'shell32.dllname 'SHGetFileInfo';

procedure TForm1.ShellTreeView1StartDrag(Sender: TObject;
  var DragObject: TDragObject);
var
  lpPath : PChar;
  sfi : SHFILEINFO;
begin
  lpPath := PChar((Sender as TShellTreeView).Path);
  SHGetFileInfo(lpPath,
                0,
                @sfi,
                SizeOf(SHFILEINFO),
                SHGFI_ICON or SHGFI_SMALLICON);
  SetCursor(sfi.hIcon);
  DestroyIcon(sfi.hIcon);
end;
Sag mir bitte ob die bei dir geht
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 14. Mär 2009, 17:23
Hallo,

ich hab jetzt den Code wie folgt eingebaut:

Delphi-Quellcode:
procedure TSymboleForm.ShellListView_TastenbilderStartDrag(Sender: TObject;
  var DragObject: TDragObject);
var
  Zeile : Integer;
  lpPath: PChar;
  sfi : SHFILEINFO;

begin
  Zeile := ShellListView_Tastenbilder.Selected.Index;

  lpPath := PChar(ShellListView_Tastenbilder.Folders[Zeile].PathName);

  SHGetFileInfo(lpPath, 0, sfi, SizeOf(SHFILEINFO), SHGFI_ICON or SHGFI_SMALLICON);
  SetCursor(sfi.hIcon);
  DestroyIcon(sfi.hIcon);
end;
Nur leider seh ich das Bild nicht als Cursor. Dafür seh ich nur einen Halteverbot-Cursor
mfg
Helmi

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

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 14. Mär 2009, 17:43
Aber eine AV bekommst du nicht?
sfi muss außerdem als Pointer übergeben werden, das da dein Compiler nicht meckert?
Kann gerade nicht schauen, hab hier auf der Maschine kein Delphi installiert ...
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

Re: Drag & Drop: DragCursor mit Bitmap statt Standard-Cu

  Alt 14. Mär 2009, 17:52
Zitat von quendolineDD:
Aber eine AV bekommst du nicht?
sfi muss außerdem als Pointer übergeben werden, das da dein Compiler nicht meckert?
Kann gerade nicht schauen, hab hier auf der Maschine kein Delphi installiert ...
Er meckert wenn sfi als Pointer übergeben wird...
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 20:52 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