AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Animirten Cursor in exe einbinden?
Thema durchsuchen
Ansicht
Themen-Optionen

Animirten Cursor in exe einbinden?

Ein Thema von Delphi-Noobie · begonnen am 28. Nov 2003 · letzter Beitrag vom 4. Dez 2003
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: Animirten Cursor in exe einbinden?

  Alt 30. Nov 2003, 15:08
Wer ist auf die Idee gekommen CreateIconFromResource() zu benutzen um eine ANICURSOR Resource zu laden ?? Soviel ich weiß unterstützt diese Funktion keine ANICUROR's.

Gruß Hagen
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#12

Re: Animirten Cursor in exe einbinden?

  Alt 30. Nov 2003, 15:14
Zitat von negaH:
Wer ist auf die Idee gekommen CreateIconFromResource() zu benutzen um eine ANICURSOR Resource zu laden ?? Soviel ich weiß unterstützt diese Funktion keine ANICUROR's.

Gruß Hagen
Wie wärs mit.... ausprobieren? Bei mir funzt es wunderbar.

PS: Wenn man das Handle einem TIcon zuweist, wird natürlich nur das erste Bild der ANI zugewiesen, wenn man es aber tatsächlich als Cursor verwendet, wirds auch animiert.
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#13

Re: Animirten Cursor in exe einbinden?

  Alt 30. Nov 2003, 17:29
klappt leider immer noch nicht! Er stürzt zwar nicht mehr ab, wenn ich den Button klicke aber er wechselt auch nicht den Cursor
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R cursorausgelastet.res}
function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR;
var
  hRes : HRSRC;
  dwSize : DWORD;
  hGlob : HGLOBAL;
  pBytes : PBYTE;
begin
  result := 0;

  If not Assigned(lpType) then
    lpType := PChar('ANICURSOR'); // Muss hier wirklich Anicursor stehen oder der Name vom Cursor?

  If (Cardinal(lpID) < $10000) then
    hRes := FindResource(hInst, PChar('#' + IntToStr(Cardinal(lpID))), lpType)
  else
  If (StrToIntDef(StrPas(lpID), 0) <> 0) then
    hRes := FindResource(hInst, PChar('#' + StrPas(lpID)), lpType)
  else
    hRes := FindResource(hInst, lpID, lpType);

  dwSize := SizeofResource(hInst, hRes);
  hGlob := LoadResource(hInst, hRes);
  If (hGlob <> 0) then
    begin
      pBytes := PBYTE(LockResource(hGlob));
      If Assigned(pBytes) then
        result := HCURSOR(CreateIconFromResource(pBytes, dwSize, FALSE, $00030000));
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var ID : tcursor;
begin
ID := 10;
Screen.Cursors[ID] := LoadAniCursor(hInstance, '1'); // in der Function sind 3 Parameter.. Warum
screen.cursor:= ID; // hier nur 2?
end;

end.
PS: @SCP..wenns bei dir alles wunderbar klappt poste doch mal bitte den gesammten Code, wie ich es gemacht habe
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#14

Re: Animirten Cursor in exe einbinden?

  Alt 30. Nov 2003, 18:31
So, hier das funzende Beispiel im Anhang.

PS: Der dritte Parameter ist nur erforderlich, wenn der Cursor in einer anderen Section als "ANICURSOR" gespeichert ist, was im Beispiel nicht der Fall ist. Bei den Sektionennamen werden übrigens nur Großbuchstaben verwendet.
Angehängte Dateien
Dateityp: rar testanicur.rar (8,2 KB, 55x aufgerufen)
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#15

Re: Animirten Cursor in exe einbinden?

  Alt 30. Nov 2003, 19:01
LoL ich habe gerade rausgefunden, dass die Anwendung auf Klick zwar zu deinem Cursor changed aber nicht zu meinen? Woran liegt das?
Ps: Wie kann ich den zum download anbieten hier, damit du ihn mal testen kannst? ich weis das noch nicht , da ich erst seit kurzem hier bin
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#16

Re: Animirten Cursor in exe einbinden?

  Alt 30. Nov 2003, 22:35
Wenn du auf Antwort gehst ist ganz unten unter dem Textfeld die Rubrik "Attachment hinzufügen", dort klickst du auf "Durchsuchen" und wählst deine Datei aus. Danach kannst du ganz normal "Absenden".
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#17

Re: Animirten Cursor in exe einbinden?

  Alt 1. Dez 2003, 15:40
Ok hier der Anicursor der nicht klappt zum download
Angehängte Dateien
Dateityp: rar cursorausgelastet.rar (8,7 KB, 18x aufgerufen)
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#18

Re: Animirten Cursor in exe einbinden?

  Alt 1. Dez 2003, 17:40
So, habs jetzt getestet. Es liegt daran, das der Cursor 256 Farben hat, die Funktion CreateIconFromResource() unterstützt aber nur max. 16 Farben. Habe noch keine Ausweg abgesehen von dem nicht so tollen LoadCursorFromFile() gefunden.
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#19

Re: Animirten Cursor in exe einbinden?

  Alt 1. Dez 2003, 17:57
Ok ich hoffe du findest die Lösung Ich versuch auch mal irgendwas, was wahrscheinlich eher erfolglos bleiben wird
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#20

Re: Animirten Cursor in exe einbinden?

  Alt 4. Dez 2003, 03:56
So, nach reiflicher Überlegung hab ich LoadCursorFromFile doch eingebaut:

Delphi-Quellcode:
function CreateAniCursorFromResource(pBytes : pByte; dwSize : DWORD) : HCURSOR;
var
  fs : TFileStream;
  td : array[0..255] Of Char;
  tfn : string;
begin
  result := 0;

  result := CreateIconFromResource(pBytes, dwSize, FALSE, $00030000);

  If (result = 0) and
      (PCardinal(pBytes)^ = $46464952) and // RIFF word
      (PCardinal(Integer(pBytes) + $08)^ = $4E4F4341) then // ACON word
    begin
      GetTempPath(255, td);
      Randomize;
      tfn := StrPas(td) + 'temp' + Format('%0:4.4x', [Random($FFFF)]) + '.ani';
      fs := TFileStream.create(tfn, fmCreate);
      try
        fs.Write(pBytes^, dwSize);
      finally
        fs.Free;
      end;
      result := LoadCursorFromFile(PChar(tfn));
      DeleteFile(tfn);
    end;
end;

function LoadAniCursor(hInst : Cardinal; lpID : PChar; lpType : PChar = nil) : HCURSOR;
var
  hRes : HRSRC;
  dwSize : DWORD;
  hGlob : HGLOBAL;
  pBytes : PBYTE;
begin
  result := 0;

  If not Assigned(lpType) then
    lpType := PChar('ANICURSOR');

  If (Cardinal(lpID) < $10000) then
    hRes := FindResource(hInst, PChar('#' + IntToStr(Cardinal(lpID))), lpType)
  else
  If (StrToIntDef(StrPas(lpID), 0) <> 0) then
    hRes := FindResource(hInst, PChar('#' + StrPas(lpID)), lpType)
  else
    hRes := FindResource(hInst, lpID, lpType);

  dwSize := SizeofResource(hInst, hRes);
  hGlob := LoadResource(hInst, hRes);
  If (hGlob <> 0) then
    begin
      pBytes := PBYTE(LockResource(hGlob));

      If Assigned(pBytes) then
        begin
          result := CreateAniCursorFromResource(pBytes, dwSize);
        end;
    end;
end;
Dabei wird die Datei aber nur für ein paar Milisekunden benötigt und direkt nach dem laden des Cursors wieder gelöscht. Kann man doch mit leben, oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 21: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