StringGrid automatisch neu zeichnen lassen



  • Hallo,
    über einen Thread fülle ich ein StringGrid mit daten,...
    dummerweise werden die Daten nicht angezeigt...

    Ich wollte das mit

    Invalidate
    

    lösen,...
    allerdings wird die Datenanzeige hier erst aktualisiert, wenn ich das stringgrid kurz mal mit einem Anteren Windowsfenster überdecke,...

    Bei

    Repaint
    

    und

    Refresh
    

    das gleiche...

    Wenn ich

    update
    

    aufrufen will kommt folgende fehlermeldung
    Ob ich jetzt update Parameter übergebe

    MainForm->StringGrid1->Update(1,1);
    

    oder nicht:

    MainForm->StringGrid1->Update();
    
    E2247 Zugriff auf '_fastcall TStringGrid::Update(int,int)' nicht möglich
    

    Was mach ich falsch, ich hab keine Idee mehr, das einfach zu lösen,...
    mir fallen jetzt echt nur noch Codelastige bastlerlösungen ein,...

    Gruß
    cppAnwender



  • also:

    StringGrid1->Update();
    

    sollte eigentlich funtionieren. Oder rufst du Update von einer Stelle auf, von der aus das StringGrid nicht erreichbar ist?

    grüssle 🙂



  • Hm,??
    Erreichbar isses, die Codeverfollständigung vom Borland findet des auch,...

    Allerdings kommt bei mir die Fehlermeldung egal von wo aus ich das Grid aufrufe.
    Auch wenn ichs direkt vom Hauptformular aufrufe auf dem sich der StringGid befindet, klommt die Fehlermeldung...???

    Gruß



  • dann versuch mal folgendes:

    StringGrid1->Visible = false;
    StringGrid1->Visible = true;
    

    ist zwar nicht die eleganteste Lösung, aber wen juckts?
    Habe im Moment leider kein Projekt da, mit dem ich es direkt testen kann, deshalb alles aus der Hüfte geschossen. Hoffe trotzdem, dass es dir weiterhilft

    grüssle 🙂



  • Danke erstmal für den Hinweis,...
    das hatte ich auch schon probiert, sorry das ich das jetzt erst erwähn,...

    Das einzige Problem ist, dass jetzt das StringGrid wild zu flackern anfängt...

    Kann man das irgendwie unterbinden??

    Gruß



  • DoubleBuffered = true;
    


  • Mich würde eher interessieren, wie Du das StringGrid aus dem Thread befüllst.



  • Hi,...
    danke für die Bisherigen Tipps und hinweise,...

    hier mal der relevante Code:

    void __fastcall TfrmMain::FormCreate(TObject *Sender)
    {  
      frmMain->StringGrid1->Cells[0][0] = "Beschr1";
      frmMain->StringGrid1->Cells[0][1] = "Beschr2";
      frmMain->StringGrid1->Cells[0][2] = "Beschr3";
      frmMain->StringGrid1->Cells[0][3] = "Beschr4";
    }
    
    void __fastcall TMyThread::Execute()
    {  
      frmMain->StringGrid1->Cells[1][0] = "Wert1";
      frmMain->StringGrid1->Cells[1][1] = "Wert2";
      frmMain->StringGrid1->Cells[1][2] = "Wert3";
      frmMain->StringGrid1->Cells[1][3] = "Wert4";
    }
    

    Wichtig:
    DefaultDrawing des StringGrid ist auf false,...

    Wenn ich es auf true setzte wird das Grid beschrieben, allerdings ist dann immer die erste Zelle blau hinterlegt,...

    Deshalb wollte ich das markieren der Felder über defaultdrawing unterbinden und ein zeichnen der Zellen selbst in die hand nehmen,...
    hat allerdings nicht so geklappt,...

    DefaultDrawing muss nicht unbedingt false sein, allerdings dürfen die zellen nicht markiert werden.
    Wie kann ich dass unterbinden, das die Erste bzw. irgendeine Zelle blau markiert ist?

    Gruß
    cppAW



  • Versuch doch mal:

    frmMain->StringGrid1->Selection = ...
    

    Ein Beispiel dazu gibt's in der Hilfe.
    Wenn du alle Parameter von TGridRect auf -1 setzt, wird keine Zelle selektiert.



  • Super, ganz großen Dank!!

    Genau sowas hatte ich vor,...


Anmelden zum Antworten