Eigene Cursor definieren

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Eigene Cursor definieren

Beitrag von Halvar »

Ich möchte ein paar eigene Cursor definieren (ja, muss sein). Ich sehe zwei Möglichkeiten.
1. Als .cur-Datei.
2. In einer Resourcendatei.

Zu 1.) Ich habe keine Möglichkeit gefunden unter Linux eine Cur-Datei zu laden. "CursorLoadFromFile" scheint es nicht zu geben.
Zu 2.) Ich habe keinen Resourceneditor gefunden.

Ich habe inzwischen 2 Tage lang mit den verschiedensten Suchbegriffen gegoogelt. Alles was ich gefunden habe ist nur unter Windows anwendbar.
Es muss doch auch für Linux eine Möglichkeit geben eigen Cursor zu definieren und auch zu verwenden.

Über Tips wie und wo ich noch suchen kann wäre ich dankbar. Wenn jemand eine praktikable Lösung hat - die nehme ich auch :roll:

Gruß und ein frohes Osterfest wünscht euch
Halvar

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

http://wiki.lazarus.freepascal.org/Lazarus_Resources" onclick="window.open(this.href);return false;
und

LoadCursorFromLazarusResource

http://www.mail-archive.com/lazarus@mir ... 23032.html" onclick="window.open(this.href);return false;

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ich stand mit Ressourcen-Dateien schon mit Delphi auf Kriegsfuss.
Deshalb habe ich mein eigenes System gebastelt um Binärdateien in den Sourcecode zu integrieren.
Falls es dich interessiert, kann ich es dir zeigen.
Ich kann jedenfalls unter Linux damit beliebige Cursors anzeigen.

Das liest sich letztlich etwa so:

Code: Alles auswählen

Const
LupeP='AAACAAEAICAAAAYABgAwAQAAFgAAACgAAAAgAAAAQAAAAAEAAQAAAAAAgAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAA/wAAAOcAAAHngAABgYAAAYGAAAHn'+
'gAAA5wAAAP8AAAA8AAAAAAAAA///////////////////////////////////////////////////////'+
'////////////////////////////////9////+P////H////j///wx///wA///4Af//+AH///AA///wA'+
'P//8AD///AA///4Af//+AH///wD////D///8=';
 
implementation
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
var Strm:TMemoryStream;
begin
  Strm:=TMemoryStream.create;
  CursorImage :=TCursorImage.Create;
  DecodeFileFromUnit(Lupep,Strm);
  CursorImage.LoadFromStream(Strm);
  Screen.Cursors[1]:=CursorImage.CursorHandle;
  Strm.free;
end;
Ich weiss, dass es auch anders geht, aber diese Ansatz funzt unter Kylix, Delphi und Lazarus und ist einigermassen kontrollierbar. Falls du möchtest, schicke ich dir die Datei EncodeforUnit.pas, auch wenn das nicht der "offizelle Weg" sein mag.

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Erst einmal Dank an euch beide.

@creed steiger: Den ersten Link habe ich schon mal besucht. Ich werde ihn mir aber noch mal genauer anschauen. Den zweiten Link werde ich auch aufsuchen und in jedem Fall berichten, ob es mir geholfen hat.

@theo: Wäre nett, wenn du mir die Datei zusenden kannst. Meine Mailadresse schicke ich dir per PN.

Habt ihr auch schön Ostereier gesucht? :mrgreen:
Das Leben ist wie eine Hühnerleiter - kurz und beschissen

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Soooo, ich habe jetzt folgendes gemacht

Code: Alles auswählen

const
  crMyCur = 31;
 
Screen.Cursors[crMyCur] := LoadCursorFromLazarusResource('curcad');
pbCAD.Cursor := Screen.Cursors[crMyCur];
Allerdings wird mir der neue Cursor nicht angezeigt.

Ach ja, das erstellen der Ressourcendatei hat funktioniert. Den Cursor habe ich als XPM gezeichnet. Aber warum wird mir MEIN Cursor nicht angezeigt? Ich sehe satt dessen einen einfachen Pfeil-Cursor.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

procedure TForm1.FormCreate(Sender: TObject);
const
nc= 1 ;
begin

screen.Cursors[nc]:=LoadCursorFromLazarusResource('ar');
cursor:=nc;

end;

funktioniert bei mir.
(Allerdings ist ar ein bmp)

Edit:Unter lazarus/examples/cursors findest du ein Beispiel

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Ja, jetzt gehts auch bei mir, allerdings sehe ich nur einen kleinen Punkt. Allerdings habe ich ein PNG verwendet. Welche Abmessungen darf das Bild den haben?
Das Leben ist wie eine Hühnerleiter - kurz und beschissen

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

32x32 ?

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Die Größe habe ich nur auch schon probiert, ebenso wie die Formate -> ico, png, bmp, jpg und xpm.

Außer dem schwer zu erkennenden Punkt sehe ich nicht den von mir gewünschten Cursor.
Das Leben ist wie eine Hühnerleiter - kurz und beschissen

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

probier mal das Beispiel aus
oder einen von
/lazarus/lcl/images/cursors
Zuletzt geändert von creed steiger am Mo 24. Mär 2008, 01:46, insgesamt 1-mal geändert.

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Das Beispiel funktioniert. Ich werde es jetzt mal mit deren Cursor-Ressource probieren.
Das Leben ist wie eine Hühnerleiter - kurz und beschissen

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Jetzt hol mich doch der Teufel. Der Cursor aus dem Beispiel geht bei mir.

:evil:
Das Leben ist wie eine Hühnerleiter - kurz und beschissen

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

Da scheint irgenwas an dem Cursor madig zu
sein.
Ich habs grad nochmal mit .xpm ohne Probleme getestet.

Halvar
Beiträge: 58
Registriert: So 16. Mär 2008, 23:40
OS, Lazarus, FPC: Debian Lenny (L 0.9.28-2 FPC 2.2.4)
CPU-Target: 64Bit
Wohnort: Brake/Unterweser

Beitrag von Halvar »

Ich habe eben unter Windows zwei Cursor-Dateien erstellt. Dann unter Linux mittels lazres eine Resourcendatei erstellt und siehe da .... es geht.

Ich habe keine Ahnung warum es nicht mit anderen Grafikformaten funktioniert hat.

Kennst du für Linux ein Prog mit dem man Cursors erstellen kann?
Das Leben ist wie eine Hühnerleiter - kurz und beschissen

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »

Normalerweise Kiconedit oder
http://wiki.lazarus.freepascal.org/Icon_Editor_Roadmap" onclick="window.open(this.href);return false; (hab ich nicht getestet)

http://www.nongnu.org/icoutils/" onclick="window.open(this.href);return false;
kann png in cur umwandeln

man icotool erklärt die Syntax

Gimp oder Pixel (http://www.kanzelsberger.com/pixel/?page_id=12" onclick="window.open(this.href);return false;)
sollten auch gehen.
Pixel ist übrigens in Freepascal geschrieben.

Antworten