Systemcursor setzen
-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Systemcursor setzen
Hallo,
weiß jemand, wie man den Systemcursor setzen kann ?
Ich hätte die entsprechende Datei im *.cur-Format, falls die notwendig wäre...
SetSystemCursor klappt nicht (passiert nichts / cursor ändert sich nicht.)
Vielen Dank.
weiß jemand, wie man den Systemcursor setzen kann ?
Ich hätte die entsprechende Datei im *.cur-Format, falls die notwendig wäre...
SetSystemCursor klappt nicht (passiert nichts / cursor ändert sich nicht.)
Vielen Dank.
-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Re: Systemcursor setzen
Ok, bin jetzt soweit gekommen:
(Die Datei "a.cur" existiert im selben Verzeichnis wie die *.exe und der Rest!)
unit1.pas(39,46) Error: Incompatible type for arg no. 3: Got "ShortInt", expected "Pointer"

Code: Alles auswählen
procedure CursorChange(Show: boolean);
var
cursor1: HCursor;
begin
cursor1 := LoadCursorFromFile('a.cur');
if Show then
SystemParametersInfo(SPI_SETCURSORS, 0, 0, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
else
SetSystemCursor(cursor1, OCR_NORMAL);
end;
unit1.pas(39,46) Error: Incompatible type for arg no. 3: Got "ShortInt", expected "Pointer"

-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Systemcursor setzen
schau mal ob hier das eventuell so ersetzt werden muss:
Code: Alles auswählen
SystemParametersInfo(SPI_SETCURSORS, 0, 0, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
Code: Alles auswählen
{a} SystemParametersInfo(SPI_SETCURSORS, nil, 0, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
{b} SystemParametersInfo(SPI_SETCURSORS, 0, nil, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
{c} SystemParametersInfo(SPI_SETCURSORS, nil, nil, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE)
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Re: Systemcursor setzen
Ja!
Sehr gut, Variante (b) hat geklappt!
Danke dir!
Sehr gut, Variante (b) hat geklappt!
Danke dir!
-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Re: Systemcursor setzen
Aber jetzt ist der Cursor in der linken oberen Ecke.
Damit meine ich, dass Cursorpos.x/y nicht da ist, wo es sein soll, sondern links oben vom Cursor-Bild.
Wie ikannn man das öndern?
Und etwas nicht ganz so dringendes: Kann man auch ANI-Cursor einbinden ?
Damit meine ich, dass Cursorpos.x/y nicht da ist, wo es sein soll, sondern links oben vom Cursor-Bild.
Wie ikannn man das öndern?
Und etwas nicht ganz so dringendes: Kann man auch ANI-Cursor einbinden ?
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Systemcursor setzen
ich weis, das das besonderer einer .cur datei ist, das diese auch speichert wo genau der Cursor ist, sozusagen der Mittelpunkt des Cursors...
Wie man das einbindet weis ich nicht, wenn du eigene Cur dateien verwendest (was sinn ergibt) würde ich erstmal nen standart Cursor laden und schauen ob dieser richtig dargestellt wird...
Hast du schonmal versucht einfach ne .ani einzubinden ?
Wie man das einbindet weis ich nicht, wenn du eigene Cur dateien verwendest (was sinn ergibt) würde ich erstmal nen standart Cursor laden und schauen ob dieser richtig dargestellt wird...
Hast du schonmal versucht einfach ne .ani einzubinden ?
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Re: Systemcursor setzen
Da könnte ich mal mit einem Hexeditor schauen...MAC hat geschrieben:ich weis, das das besonderer einer .cur datei ist, das diese auch speichert wo genau der Cursor ist, sozusagen der Mittelpunkt des Cursors...
Ja...MAC hat geschrieben:Wie man das einbindet weis ich nicht, wenn du eigene Cur dateien verwendest (was sinn ergibt).
Habe einen Windows-Cursor von "c:\WINDOWS\Cursors" genommen (3dsmove.cur) dessen Mittelpunkt nicht links oben im Bild ist - und es funktioniert!MAC hat geschrieben: würde ich erstmal nen standart Cursor laden und schauen ob dieser richtig dargestellt wird...
Ja, über die Ressource ging es nicht (invalid... ???.. ani??).MAC hat geschrieben:Hast du schonmal versucht einfach ne .ani einzubinden ?
Aber ich habe es jetzt mal temporär geschafft, direkt per Datei zu laden!
Und das hat geklappt!

Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Windows, Useful;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button_Fload: TButton;
Button_ST: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button_FloadClick(Sender: TObject);
procedure Button_STClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
FingerCursor, NormalCursor: HCursor;
FileCursor: HCursor;
implementation
{ TForm1 }
procedure CursorChange(CursorName: HCursor);
begin
SetSystemCursor(CursorName, OCR_NORMAL);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CursorChange(FingerCursor);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CursorChange(NormalCursor);
end;
procedure TForm1.Button_FloadClick(Sender: TObject);
begin
FileCursor := LoadCursorFromFile(PChar(Edit1.Text));
CursorChange(FileCursor);
end;
procedure TForm1.Button_STClick(Sender: TObject);
begin
SystemParametersInfo(SPI_SETCURSORS, 0, nil, WM_SETTINGCHANGE or SPIF_UPDATEINIFILE);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FingerCursor := LoadCursorFromLazarusResource('Finger1');
NormalCursor := LoadCursorFromLazarusResource('Normal');
end;
initialization
{$I unit1.lrs}
{$I cursr.lrs}
end.
edit:
---->

-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Re: Systemcursor setzen
So, habe jetzt herausgefunden, wie man es machen kann!
Wie man eine ANI per Ressource einbindet, ist mir noch nicht klar!
MARK
- Greenfish Icon Editor
- Neu - Cursor
- Größe wählen (z.B. (16px)² )
- "Hotspot" wählen:
- Hotspot setzen, also positionieren (dazu am blinkenden "X" ziehen):
Wie man eine ANI per Ressource einbindet, ist mir noch nicht klar!
MARK
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Systemcursor setzen
markkowalt hat geschrieben:Wie man eine ANI per Ressource einbindet, ist mir noch nicht klar!
Ressourcen werden mit einem Ressourcen-Typen und einem Namen gespeichert. Die Grafik-Klassen definieren selbst, welche Ressourcen-Typen sie unterstützen, oder überhaupt versuchen zu laden.markkowalt hat geschrieben:
In dem Fall musst du einen Umweg gehen, damit die Begrenzung auf den Typ gar nicht erst überprüft werden kann:
- Du suchst dir heraus, mit welcher Stream-Klasse du die Daten laden kannst (möglicherweise TLazResourceStream oder aus einer Datei: TFileStream).
- Erstelle ein Objekt dieser Klasse
- Wenn nötig, setze die Position auf 0 (Stream-Anfang)
- Lade den Cursor von dem Stream (und nicht direkt aus einer Ressource)
- Gebe den Stream wieder frei
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein