langsames OnMouseMove



  • Danke für die Anregungen. Da habe ich einiges zu probieren. Es dauert bei mir ein bisschen bis ich alles getestet habe (Bin leider berufstätig und kein Schüler oder Student.)



  • Habe es fertig und wollte mal die Lösung angeben (vielleicht hilft es jemanden):

    1. In die Headerdatei:

    private:
            Graphics::TBitmap *spieler_a[32];
    

    2. Bilder aus der ImageList ins Array:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    for (int r=0; r<32; r++)
      {
      spieler_a[r]=new Graphics::TBitmap;
      ImageList1->GetBitmap(r,spieler_a[r]);
      }
    }
    

    3. Verwenden des Array mit MouseMove ect.

    if ( X>460 && X<500 && Y>(600-186) && Y<600)
      {
      Image1->Canvas->Draw(100+(9*40),350,spieler_a[9]);
      }
    


  • Hallo

    jetzt hast du es nicht effizient gamacht (was wohl meine Schuld ist). Entweder du nimmst TImageList ODER ein eigenes Array.
    Wie bereits beschrieben, hat die ImageList die Funktion Draw, mit der du ohne Umwege ein Bitmap zeichnen kannst. Dann kannst du das eigene Array wieder weglassen.

    bis bald
    akari



  • Ich habe auch eine ganze Weile nach einer Lösung mit ImageList1->Draw(...); gesucht. Gibt es denn etwas einfaches wie:

    ImageList1->Draw(1,x-koordinate,y-koordinate);
    

    ?



  • Hallo

    Aus der Hilfe zu den Methoden der TImageList

    Die Methode Draw zeichnet das mit dem Parameter Index angegebene Bild auf der bereitgestellten Zeichenfläche.

    void __fastcall Draw(Graphics::TCanvas* Canvas, int X, int Y, int Index, bool Enabled);

    Beschreibung

    Verwenden Sie die Methode Draw zum Zeichnen eines Bildes auf der Zeichenfläche. Das Bild wird an der Position X, Y in dem Stil gezeichnet, der in der Eigenschaft DrawingStyle festgelegt ist. Wenn der Parameter Enabled auf false gesetzt ist, wird das Bild in Graustufen gezeichnet.

    bis bald
    akari



  • Ich bekomme es leider nicht hin. Habe jetzt das Problem, daß ich nicht verstehe wie ich ein einzelnes Bild meiner ImageList zugreifen kann. Mir fehlt etwas das Verständnis für diesen Ausdruck: "Graphics::TCanvas* Canvas". Kann mir jemand ein Beispiel für ImageList1->Draw(...) geben?



  • Hallo

    ist doch ganz einfach :

    for (int r=0; r<SpielerBitmap.Length; r++)
      {
      if (cursor_pos==r)
        ImageList1->Draw(Image1->Canvas,100+(r*40),350,r, true);    
      else
         ImageList1->Draw(Image1->Canvas,100+(r*40),400,r, true);    
       }
    

    bis bald
    akari



  • Oh Wunder, es klappt. Vielen Dank!!! 🙂



  • Hallo

    Wie kann ich ein bmp in ein 2d Array laden?

    euer Pate



  • Hallo

    Gegenfrage : Wozu brauchst du sowas?
    Nimm TBitmap, mit der Eigenschaft TBitmap::Pixels kannst du auch jeden Einzelnen Pixel lesen und schreiben.

    bis bald
    akari



  • um die position auf ein bild zu ermitteln, es wir ein bild angezeigt wo ich die mauspos einlese im array schaue ich dann nach einer bestimmten farbe...

    kannst du mir das bitte genauer schreiben

    also zb so

    TBitmap Array[100][100];

    Array[][] = LoadFromFile("\\bild.bmp);

    euer pate



  • Schau bitte nochmal nach TBitmap::Pixels. Das ist ein 2D-Array.



  • sorry ich finde nix, in der hilfe gibt es keine eigenschaft pixel.
    es gibt nur eine pixelformat, damit kann man das format ändern

    ich sollte vieleicht erwähnen das ich bcb benutze

    euer pate



  • Hallo

    Nun gut, das muß TBitmap::Canvas::Pixels heißen.
    Zugriff also zum Beispiel

    TColor Farbe = Bitmap->Canvas->Pixels[10][5];
    

    bis bald
    akari



  • ähm
    ich sehe das so
    das bitmap eine variable von tcolor ist, oder?

    braucht man eine lib um loadfromfile zu benutzen, irgendwie kennt er das nicht

    euer pate



  • Hallo

    das bitmap eine variable von tcolor ist, oder?

    Nein, TBitmap ist eine eigene Klasse und hat mit TColor erstmal nichts zu tun.
    Sondern es hat interne Member, die dann einen []-Operator anbieten, um TColor zu lesen.

    braucht man eine lib um loadfromfile zu benutzen, irgendwie kennt er das nicht

    Wenn du das darauf beziehst

    Array[][] = LoadFromFile("\\bild.bmp);
    

    dann ist das ja auch ganz falsch. Das muß nun so aussehen.

    Bitmap->LoadFromFile("\\bild.bmp);
    

    Das hättest du aber auch aus der BCB-Hilfe zu TBitmap::LoadFromFile herauslesen können

    bis bald
    akari


Anmelden zum Antworten