AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Animiertes LoadCursor?

Ein Thema von himitsu · begonnen am 22. Sep 2016 · letzter Beitrag vom 25. Sep 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#1

Animiertes LoadCursor?

  Alt 22. Sep 2016, 16:57
Delphi-Version: 5
Moin, LoadCursor, LoadCursorFromFile erlauben es ja, dass man animierte Cursor (*.ani) lädt.

Aber warum erlauben die RessourcenCompiler vom Delphi nicht das Einbinden dieser Cursor?
Code:
xxx CURSOR "MyCursor.ani"
Es gibt da eine Fehlermeldung ala "ungülige Datei".

Unter 'nem anderen Ressource-Typ lässt sich diese Datei zwar einbinden, aber dann finden LoadCursor und LoadImage diese "Cursor"-Ressource nicht
und man darf das Laden der Ressource selber implementieren und diesen Cursor kann man dann (offiziell) nicht aus dem RAM, bzw. dem Pointer dieser Ressourse laden, sondern müsste (offiziell) diesen Cursor dann erstmal in 'ne Datei speichern.


offiziell = ich weiß wie es dennoch geht (aktuell)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Sep 2016 um 17:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#2

AW: Animiertes LoadCursor?

  Alt 22. Sep 2016, 17:29
Unter Delphi 10.1 Berlin funktioniert das tadellos.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#3

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 10:01
Hatte es mal auch schon in XE8 probiert und da ging es nicht ... toll, dass man sich ständig die Bugfixe kaufen darf
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 11:51
Aber warum erlauben die RessourcenCompiler vom Delphi nicht das Einbinden dieser Cursor?
Also ich hatte sowas auch mal gemacht und das funktionierte. Mit XE3.

Bei mir sah das dann so aus in der Res RC-Datei:

Code:
#define ANICURSOR 21
DROPBELOWCUR CURSOR "DropBelow.cur"
DROPABOVEANI ANICURSOR "DropAbove.ani"
Die Datei lässt sich dann auch problemlos kompilieren und in das Projekt einbinden.

Geladen habe ich die Datei dann mit folgenden Code. Keine Ahnung ob das der beste Weg ist, aber es funktioniert problemlos.

Delphi-Quellcode:
procedure LoadAnimatedCursor(ResourceName: string; ResourceType: PWideChar; CursorIdx: Integer);
var
  ResStream: TResourceStream;
  ResFileName: PWideChar;
begin
  ResStream := TResourceStream.Create(HInstance, ResourceName, ResourceType);
  try
    ResFileName := PWideChar(IncludeTrailingPathDelimiter(ExtractFilePath(aktuellerpfadUserIni)) + 'CursorRes');
    ResStream.Position := 0;
    ResStream.SaveToFile(ResFileName);
    Screen.Cursors[CursorIdx] := LoadImage(HInstance, ResFileName, IMAGE_CURSOR, 0, 0,
      LR_DEFAULTSIZE or LR_LOADFROMFILE);
    DeleteFile(ResFileName);
  finally
    ResStream.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#5

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 12:57
Zitat:
Code:
#define ANICURSOR 21
DROPBELOWCUR CURSOR "DropBelow.cur"
DROPABOVEANI ANICURSOR "DropAbove.ani"
Witziger Weise hatte ich mit dem DEFINE auch Probleme ... da mackerte ebenfalls der ResCompiler.
Ohne Define, also mit dem Namen "ANICURSOR" (oder irgendeinem anderem Bezeichner) ging es.

Aber auch bei deinem Code das genannte zweite unschöne Problem.
Man muß vorher den Cursor als Datei speichern. (auch wenn es "aktuell" einen Trick/Bug gibt, sodass man LoadImage auch aus dem RAM laden lassen kann)
-> Die Ressource selber auslesen, in Datei schreiben, von dort laden und danach die TempDatei aufräumen
-> anstatt die Ressource direkt laden lassen zu können.

Oder FindResource > LoadResource > LockResource > LoadImage
Oder TRessourceStream > Stream.Memory (ist das HGlobal) > LoadImage
Aber auch hier alles wieder "manuell".
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Sep 2016 um 13:04 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 13:29
Aber auch bei deinem Code das genannte zweite unschöne Problem.
Man muß vorher den Cursor als Datei speichern.
Ja das stimmt wohl. Wobei ich das jetzt nicht unbedingt als absolutes NoGo bezeichnen würde. Eine temporäre Datei beim Start irgendwo anzulegen die nach dem Laden des Cursors sofort wieder gelöscht wird finde ich persönlich jetzt nicht so schlimm.

Nachteil beim Ablegen einer Datei ist natürlich, dass dadurch der Programmstart u.U. verzögert wird. Es handelt sich zwar nur um eine sehr kleine Datei, aber dennoch muss ja alles im NTFS System gemacht werden was auch bei einer großen Datei der Fall wäre.

Bis jetzt hatte ich aber noch keinen Fall, in dem das Programm "ewig" zum Starten gebraucht hätte. Man müsste da höchstens mal mit dem QueryPerformanceCounter() messen wie lange das dauert. Mit einem TickCount würde das wahrscheinlich nicht ersichtlich werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#7

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 13:54
Es wird eine Komponente für "fremde" Programme und in sowas schreibe ich ungern Dateien einfach so irgendwo auf die Platte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 13:58
Es wird eine Komponente für "fremde" Programme und in sowas schreibe ich ungern Dateien einfach so irgendwo auf die Platte.
Tja, dann musst du wohl bei deinem "Hack" bleiben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#9

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 14:04
Mir scheint es ja eher ein "Bug" in den beiden RessourcenCompilern vom Delphi zu sein ... war mir nur nicht sicher, ob es nicht doch richtig so ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#10

AW: Animiertes LoadCursor?

  Alt 23. Sep 2016, 18:05
Das Beispiel in Berlin habe ich direkt mit dem Menüpunkt Projekt - Ressourcen und Bilder hinzugefügt und den Typ einfach auf CURSOR geändert. Das führt zu folgender RC-Datei:
AniCursor CURSOR "C:\\WINDOWS\\Cursors\\aero_working.ani"
Der Code zum Laden sieht dann so aus:

Delphi-Quellcode:
procedure TForm126.FormCreate(Sender: TObject);
var
  cur: HCURSOR;
begin
  cur := LoadCursor(HInstance, 'AniCursor');
  Screen.Cursors[1] := cur;
  Cursor := 1;
end;
Als Resourcen-Compiler verwende ich den mitgelieferten brcc32.exe Dateiversion 50.4.227.0.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:19 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