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 übergebeMainForm->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 weiterhilftgrü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,...