im DrawGrid Zellen "aktivieren" (war: DrawGrid)



  • Danke!

    Ist es möglich sowas mit der DrawGrid Komponente darzustellen, wie im Link zu sehen ist?
    [url]
    http://www.keiang.de/modules.php?name=PCcool&file=SED1565
    [/url]

    unter technische Beschreibung:
    FastLCD - ver 1.4.1 Free!

    dort ist ein Programm aufgeführt.

    also ich möchte wie im programm mit dem cursor über das Feld fahren, und die einzelnen Felder sind aktiv.

    Geht das?



  • also ich möchte wie im programm mit dem cursor über das Feld fahren, und die einzelnen Felder sind aktiv

    1. OnMouseMove des DrawGrid
    2. mit MouseToCell aus X und Y die Zeile und Spalte machen (siehe Beispiel in der BCB-Hilfe)
    3. aktive/inaktiv setzen



  • ich hab es mal implementiert.

    void __fastcall TForm1::DrawGrid1MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
            long Column, Row;
            DrawGrid1->MouseToCell(X, Y, Column, Row);
            //DrawGrid1->Canvas->Brush->Color = clBlack;
    }
    //---------------------------------------------------------------------------
    

    aber der Cursor hinterlegt auch nur das Feld auf das der Cursor gerade zeigt.

    ich möchte ja das die Felder aktiv bleiben, also mit einer Farbe hinterlegt werden, wenn der Cursor schon weiter ist.
    das aktive Feld soll dann durch einen weiteren Mouse Click inaktiv werden, also Farbe wieder weg.

    Hat jemand nen Tip?



  • Hat denn jemand schon mal mit der DrawGrid Komponente gearbeitet?

    Ist mein Ansatz denn richtig?
    oder wie kann man das besser machen?

    viele Grüße!



  • Leg dir ein Array an, das in den Abmessungen der Linien- und Zeilenzahl deines Grids entspricht. In dem Array speicherst du den "Zustand" jeder Zelle, z.B. 0 für weiss, 1 für farbig.
    Im OnDrawCell fragst du das Array ab und färbst die Zelle entsprechend ein.
    Im OnMouseMove schreibst du für die darunterliegende Zelle den Wert in's Array, und wenn die Maus in eine andere Zelle wechselt (Koordinaten ggf. ebenfalls "extern" zwischenspeichern) forderst du ein Repaint des Grids an.

    Ungetestet, ohne BCB oder Doku in Reichweite.



  • Danke, ich versuche es mal.

    hoffe dass ich es so hinbekomme..

    Codebeispiele gibt es wohl dafür nicht?
    also wie man ein DrawGrid benutzt?
    und die moveoncell funktion verwendet?



  • ich habe bis jetzt noch nicht herausgefunden, wie ich den Zustand meines Arrayfeldes aktivieren oder deaktivieren kann, das ist im wesentlichen auch mein Problem.

    im StringGrid geht das ja ohne weiteres, aber im DrawGrid??



  • Schau dir mal OnDrawCell an. beispiele wie du zellen eines DrawGrid farbig bekommst, findest du in den FAQ (siehe TStringGrid).



  • hi Sunday,

    wie meinst du das, mit dem Array anlegen?
    Ein neues Array anlegen, dass dem GridArray entspricht mit den Zeilen * Spalten?

    wie muss ich die beiden Funktionen OnDrawCell und OnMouseMove verwenden, das leuchtet mir noch net so recht ein, hab auch mal in der Hilfe geschaut, aber da wird mir des auch net so richtig klar..

    kennst du oder jemand anderst eine Applikarion, die auf die beiden Funktionen eingeht?

    Schöne Grüße



  • liest du überhaupt was hier gepostet wird?

    du wirst doch wohl wissen, wie man ein array (2-dimensional) anlegt?! dort speicherst du, wie bereits geschrieben, den zustand deiner gitterzelle, eine 1 heisst dann zum beispiel aktiv, und eine 0 heisst inaktiv. das entsprechende feld fragst du mit hilfe der koordinaten ab die du in onmousemove erhaeltst und mit mousetocell umgewandelt hast. in ondrawcell zeichnest du dann je nach wert im array die zelle in einer anderen farbe.





  • Sorry,

    da gab es wohl ein missverständnis!!
    😉

    natürlich weiß ich wie man ein Array anlegt, das war ja auch net die frage, ich hab bloß nur keine ahnung, wie ich denn die beiden Funktionen richtig benutze, mehr nicht.



  • Sorry, aber das steht in der Hilfe:

    MouseMove, wenn die Maus über dem Grid ist

    DrawCell wenn 1 Zelle gezeichnet werden muss.



  • Ok,

    danke, werd mir die hilfe noch mal genau anschaun
    und sorry wegen dem missverständnis!


Anmelden zum Antworten