Autor Beitrag
mtin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Fr 28.04.06 16:30 
hey,
ich würde gerne mit einem Delphi-Programm den Mauscursor verändern, und das auch noch dynamisch, also müsste ich den cursor zur Laufzeit erstellen...alle möglichkeiten die ich bisher gesehen hab um den cursor zu verändern gehen aber auf das laden einer .cur oder .ani Datei zurück...also müsste ich das entweder so speichern können oder noch besser ein Bitmap in einen Cursor bekommen!

hoffe ma das geht irchendwie!
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Fr 28.04.06 16:42 
Hab mal im EDH (Easy-Delphi-Helper von www.dsdt.info) nachgeguckt, da steht das hier dazu:

Zitat:
Unter Delphi hat man die Möglichkeit eigene, animierte Cursor einzubinden. Dies geschieht mit der Routine 'LoadCursorFromFile'. Als Parameter muss man dieser Funktion nur den Pfad zur *.ani-Datei übergeben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
const 
  crMyCursor = 22391;  // x-beliebige Zahl
begin
  Screen.Cursors[crMyCursor] := LoadCursorFromFile('C:\cursor.ani');
  Screen.Cursor := crMyCursor;
end;


Die Cursor-Konstante muss größer als 0 sein, denn ansonsten kann es Probleme mit bereits definierten Cursor-Konstanten geben. Möchte man den Cursor auch in anderen Routinen verwenden, sollte die Konstante global deklariert werden.

In der Onlinehilfe befindet sich unter dem Stichwort TScreen,Cursors ein Beispiel, wie man eigene Cursors aus einer Ressource einbindet.
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Fr 28.04.06 18:33 
ne, das mein ich ja grad ebn nicht!
das hab ich auch schon überall gefunden, allerdings kann ich ja damit schlecht während der Laufzeit einen Cursor erstellen, oder kann man irgendwie ein TBitmap als .ani speichern!?

Ich möchte während mein Programm läuft in einer Bitmap den cursor generieren und dann als cursor setzen...hoffe ma jetzt isses nen bisschen verständlicher :)
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Fr 28.04.06 18:48 
Mit dieser Methode gehen auch Bitmaps.
Jedenfalls hatte ich das so im Hinterkopf, ich probiers gleich ma aus.
Danniolo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 693



BeitragVerfasst: Fr 28.04.06 19:01 
Ich hab noch einen anderen Source gefunden, mit dem lassen sich auch .ico Dateien als Cursor eisetzten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  var h: THandle;
begin
  h:=LoadImage(0,'C:\Icon.ico',IMAGE_CURSOR,0,0,LR_DEFAULTSIZE or LR_LOADFROMFILE);
  if h <> 0 then
  begin
    Screen.Cursors[1]:=h;
    Form1.Cursor:=1;
  end;
end;


Mit dieser Procedure lassen sich dann Bitmaps in Icons umwandeln, ich hoffe so geht es. :wink:
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Sa 29.04.06 16:18 
mhm, danke, soweit geht das erstmal...einziges Problem ist, dass ich jetzt den Punkt, mit der die Maus klickt nich festlegen kann... das ist immer ganz oben rechts (0,0)

wenn das noch irgendwie gehen würde wärs perfekt :D
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: So 30.04.06 18:52 
hab das folgende schonma an Luckie geschickt, aber vielleicht findet sich ja hier auch jemand der mir helfen kann...

Zitat:
hallo!
hab hier irgendwo im Forum diesen code von dir gesehen, der aus einem Bitmap ein Icon macht...das war genau das was ich brauchte :)
hab das dann mal auf meine Bedürfnisse zugeschnitten (Bitmap-->Cursor):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure seticon(const bm1,bm2:TBitmap;x,y:integer);
  var h: THandle;
  Iinfo:TIconInfo;
begin
  try
    Iinfo.fIcon:=true; 
    Iinfo.xHotspot:=x;
    Iinfo.yHotspot:=y;
    Iinfo.hbmMask:=bm2.Handle;
    Iinfo.hbmColor:=bm1.Handle;
    Screen.Cursors[1]:=CreateIconIndirect(Iinfo);
    Form1.Cursor:=1;
  finally 
    bm2.free;
    bm1.free;
  end;
end;

Das funktioniert auch erstmal insofern, dass sich dadurch der cursor ändert...allerdings nicht so wie ich das will! Auf dem folgenden screenshot kannst du links das "bm1" erkennen (Iinfo.hbmColor:=bm1.Handle;) und rechts die Maske (bm2).jetzt müsste doch eigentlich dass entstehende icon einfach nur diesen grünen pfeil enthalten und sonst transparent sein, oder? Es wird aber genau das grüne transparent und der rest bleibt sichtbar...das siehste über dem einen Button da (mist, der screenshot hat die maus nich mitgenommen...auf dem 2. screenshot siehste aber wie es aussah, "test.ico")...
habs auch schonmal invertiert versucht (die Maske) ist aber genau das gleiche (was schonmal sehr merkwürdig ist)
[url=img133.imageshack.us...2920061926329ml.png]user defined image[/URL] [url=img141.imageshack.us...2920061937418hu.png]user defined image[/URL]
Gehe ich hier vielleicht einfach völlig falsch ran und eine Maske in Delphi ist was anderes als das was ich von Photoshop und co her kenne?
Oder weißt du sonst noch was?
Hab das ganze auch mal genau so probiert wie du das im Forum gepostet hattest, das gespeicherte Icon sieht dann aber ganz genauso aus (wie der cursor)

ich hoff mal du kannst mir helfen :)