this slowpoke moves

Build Animate Cursor in Resource

Um einen eigenen Maus-Cursor in seinem eigenen Programm zu nutzen, kann einfach eine animierte ANI Datei geladen und dem Bildschirm übergeben werden.

Aber auch ANI-Dateien lassen sich in den Ressourcenbereich der EXE-Dateien einbauen, damit diese dem Programm immer zur Verfügung stehen.

Das folgende Beispiel zeigt, wie sich das erledigen lässt.

Schritt 1 :
Erstellt ein neues Projekt, speichert es und legt die Datei "MyAniCursors.rc" an.

Schritt 2 :
Kopiert die Zeile in die  "MyAniCursors.rc" Datei und speichert es.
GLOBE  ANICURSOR my.ani
Schritt 3 : 
Kopiert die "brcc32.exe" aus dem ..Delphi\bin\.. Ordner in euren Projektordner.

Schritt 4 :
Besorgt euch eine animierte Cursor ANI-Datei, kopiert sie in den Projektordner und benennt sie in "my.ani" um.

Im Netz sind viele ANI-Dateien erhältlich, aber man kann auch eigene herstellen.

Schritt 5 :
Nun müsst ihr die "MyAniCursors.rc" Datei per Drag&Drop auf die "brcc32.exe" Datei ziehen, damit eine  "MyAniCursors.res" Datei erzeigt wird.

Schritt 6 :
Startet das Projekt mit Delphi und kopiert den folgenden Code in die Unit.
const AniGlobe = 1;

{$R *.DFM}
{$R MyAniCursors.res}

function SaveResourceAsTempFile(const ResName: string; ResType: pchar): string;
var
  TempFileName: array [0..MAX_PATH-1] of char;
  TempDir: array [0..MAX_PATH-1] of char;
begin
  GetTempPath(MAX_PATH, TempDir);
  if GetTempFileName(TempDir, '~', 0, TempFileName) = 0 then
    raise
    Exception.Create(SysErrorMessage(GetLastError));
    Result := TempFileName;
  with
  TResourceStream.Create(hInstance, ResName, ResType) do
   try
   SaveToFile(result);
   finally
     Free;
   end;
end;

function GetResourceAsAniCursor(const ResName: string): HCursor;
var CursorFile: string;
begin
  CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR');
  Result := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0, 0,
                           LR_DEFAULTSIZE or LR_LOADFROMFILE);
  DeleteFile(CursorFile);
  if Result = 0 then  raise Exception.Create(SysErrorMessage(GetLastError));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.Cursors[AniGlobe] := GetResourceAsAniCursor('GLOBE');
end;
Cursor Aktivieren :
procedure TForm1.GlobeBtnClick(Sender: TObject);
begin
  Cursor := AniGlobe;
end;
Cursor Deaktivieren :
procedure TForm1.DefaultBtnClick(Sender: TObject);
begin
  Cursor := crDefault;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate