Mauscoursor ändern



  • Hallo!

    Ich programmiere gerade ein Programm wo es ein Inventar gibt. Dort soll man Gegenstände verschieben und dafür muss ich wissen, wie man den Mauscoursor ändern kann, auch in der Größe, der sich der Cursor in das zu verschiebende Objekt ändern soll.
    Ich hab da bis jetzt keine Möglichkeit gefunden.



  • schau mal

    Hilfe TControl::Cursor

    mfg
    Steffen



  • Schau Dir mal die Eigenschaft "Cursor" der Objekte an.



  • Erster tip scheint gut zu sein, zweiter bringt mich nicht weiter



  • "Vorausgesetzt wird, daß sich in der Ressourcendatei (.RES) der Anwendung bereits ein Cursor mit dem Namen NewCursor befindet." hmm

    Also das hilft mir alles nicht.
    Der Cursor soll größer sein als die Standardcursor da er sich in die objekte verwandeln soll.
    Und wenn ich die alle erst in die .res packen muss ist das irgendwie auch doof, gibt es da keine elegante LoadFromFile lösung`?



  • Original erstellt von <Gast>:
    gibt es da keine elegante LoadFromFile lösung`?

    LoadImage().



  • WebFritze: Könntest du heute wieder das BCB Forum flooden so wie gestern? Dat war geil. 😃



  • Ja wa? Sah geil aus! Aber heut mal nicht. 😉 😃



  • eigener cursor wie folgt...

    - im bildeditor eine neue resourcendatei (*.res) erstellen
    - in unbekannt1.res rechtsklicken auf 'Inhalte'
    - 'Neu' - 'Cursor' auswählen
    - doppelklichen auf Cursor1 und den eigenen cursor zeichnen
    - Cursor1 ist der name des cursors im programm der bei LoadCursor
    angegeben werden muss
    - folgenden code im programm noch

    //---------------------------------------------------------------------------
    
    const TCursor crMyCursor = 1;
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      // cursor laden
      Screen->Cursors[crMyCursor] = LoadCursor(HInstance, "Cursor1");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      // anzeigen
      Screen->Cursor = crMyCursor;
    }
    //---------------------------------------------------------------------------
    


  • Und wenn du den Cursor nicht aus einer Resource sondern aus nem File laden willst, dann benutzt du genau an der Stelle, wo Sunday LoadCursor() benutzt die Funktion LoadImage().



  • Vielen dank an euch 🙂



  • Klappt noch nicht ganz.
    Was ist daran falsch?

    Screen->Cursors = LoadImage(HInstance, "1.bmp");

    "Zu wenige Paramter im Aufruf..." 😕



  • Also, ums ganz richtig zu machen:

    const TCursor crEigenerCursor = 1;
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Screen->Cursors[crEigenerCursor] = LoadImage(HInstance, ".\\Cursor1.cur", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);
        Screen->Cursor = crEigenerCursor;
    
    }
    

    Schau auch mal in der Win32SDK-Hilfe nach, dort stehen die ganzen Parameter zu LoadImage() beschrieben.



  • Wo ist denn da die Pfadangabe zur bmp datei? 😕



  • Augen auf!

    LoadImage(HInstance, ".\\Cursor1.cur", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);



  • und da kann ich einfach auch eine datei mit bmp endung einsetzen?



  • Jaaa 🙄

    LoadImage(HInstance, "c:\\irgendeinpfad\\deinXXXXXXcursor.bmp", IMAGE_BITMAP , 0, 0, LR_LOADFROMFILE);

    Steht alles in BCB->Hilfe->WindowsSDK



  • Dankeschön F98 😃 😉



  • Hä? Geht es jetzt um Cursors oder Bitmaps? Gast, präzisiere deine Frage. Wenn du LoadImage mit IMAGE_BITMAP verwendest, kommt da kein Cursor sondern ein Bitmap raus! Bzw. ein HBITMAP, also ein Handle auf ein Bitmap.



  • *heul*

    Ich versuche jetzt ganz genau zu beschreiben was passiert ist:
    ich habe deinen code fast 1:1 übernommen, nur hier habe ich etwas verändert:

    Screen->Cursors[crEigenerCursor] = LoadImage(HInstance, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

    Liegt da der Fehler? Beim Buttondrücken ist nichts passiert, "1.bmp" lag im selben ordner wie die exe.
    Dann hab ich das ganze in OnCreate gepackt, dann hat er die Form geladen es kam eine Sanduhr welche erst wieder verschwand wenn man die form mit dem mauszeiger kurz verlassen hat.
    Dann ist mein Rechner abgestürzt ( sch... Internet Explorer ...), nun kommt andauernd ein Fehler wenn ich ein neues Projekt speichern und compilieren will:

    " /* TCustomForm.Create / inline __fastcall virtual TForm(Classes::TComponent AOwner) : TCustomForm(
    AOwner) { }"

    Darauf ist ein Pfeil gerichtet, Fehlermeldung:

    "Fehler beim Lesen von Form1->OnKeyDown. Ungültiger Wert der Eigenschaft".

    Dabei hab ich onkeydown heute gar nicht benutzt... 😞


Anmelden zum Antworten