![]() |
AW: Datenformular Oberfläche
Hmm, wie wäre es mit der Suchfunktion hier im Forum ;)
![]() ![]() Edit: das färben der Zelle musst du selbst übernehmen. Stichwort 'DrawCell' Edit2: die selektierte Zelle kannst du ganz leicht im OnClick Event abfragen. ![]() |
AW: Datenformular Oberfläche
Also ich würde ein DrawGrid hier bevorzugen.
Ein StringGrid ist immer praktisch, wenn man Text darstellen will und evtl. der Benutzer diesen Text bearbeiten soll. Hier soll aber etwas ausgewählt und per Klick oder Tastendruck ein Zustand geändert werden. Da könnten die Funktionen vom StringGrid etwas im Wege sein um es perfekt erscheinen zu lassen. Da das StringGrid aber eine Ableitung vom DrawGrid ist, arbeiten beide Varianten ziemlich ähnlich |
AW: Datenformular Oberfläche
Aber da er noch in der 'Probier'-Phase ist, wird ein Stringgrid leichter zu handeln sein. Ansonsten stimme ich dir voll zu.
|
AW: Datenformular Oberfläche
... :duck:
Peinlich. Ich hab zwar genau danach gesucht, aber nur über Google, weil ich dachte "Wenn es hier im Forum was gibt wirds ja auch auf Google zu finden sein". Tja.. Soviel sinnloser Aufwand wegen einem (fast) Einzeiler. Aber jetzt gehts ja, Dankeschön! :-D Jetzt mach ich mich dann mal an die Arbeit, falls es noch was zu dem Thema gibt melde ich mich nochmal.. Danke nochmal an alle! |
AW: Datenformular Oberfläche
Hallo nocheinmal,
dank Euren Tipps komme ich mit dem Färben und anpassen der Grids zwar gut klar und mache viele Fortschritte, eine Sache gibt es aber noch. Ich habe die Stringgrid so eingestellt, dass die selektierte Zelle Blau und alle anderen makierten Zellen rötlich eingefärbt sind. Zur Übersicht wird jede zweite Spalte/Reihe leicht gräulich verfärbt. Nur wenn ich in eine der Verfärbten Zellen etwas schreibe wird sofort das OnDrawCell Ereignis ausgelöst, welches den Text wieder übermalt. Zuerst hab ich versucht, den Text danach einfach nocheinmal schreiben zu lassen, das bringt aber nichts, da dann sofort wieder das Ereignis ausgelöst wird. Ich habe im Forum auch mal nach transparenten Farben / transparentem zeichnen mit Canvas gesucht, das gibt es aber nicht bzw. wäre sehr aufwändig. Hat jemand vielleicht eine Idee, wie ich das Problem lösen könnte oder mit welchen Suchbegriffen ich mich durchhangeln könnte ? Dankeschön schoneinmal :) |
AW: Datenformular Oberfläche
Hm, habe gerade mal in einem kleinen Testprogramm versucht, den Inhalt und die Farbe als Bitmap zu Speichern und diese dann wiederum in der Tabelle auszugeben. Das erscheint mir aber erstens sehr umständlich und zweitens vor allem nicht gerade performant, wenn man bedenkt mit welchen Listengrößen ich hier hantiere.. Hat da vielleicht jemand einen besseren Ansatz für mich ? Komme hier irgendwie nicht weiter
|
AW: Datenformular Oberfläche
Nein, so macht man das auch nicht ;)
Alles was dort erscheinen soll musst du im OnDrawCellEvent erledigen also zeichnen. Zeig doch mal den Code den du bislang dort stehen hast EDIT Bitte definiere doch auch was du unter "etwas schreibe" genau meinst. Soll der Anwender da etwas schreiben, oder die Anwendung Text ausgeben? |
AW: Datenformular Oberfläche
Mein bisheriges OnDrawCellEvent (Der Umweg über "sg", da ich mehrere Stringgrids hab, die ich gleich Formatieren möchte):
Delphi-Quellcode:
Wenn ich ein Feld mit Text(z.B. "TEST" oder "111222333") selektiere verschwindet der Text, da er von dem OnDrawCell-Event übermalt wird. Sobald ich die Selektion aufhebe ist der Text aber wieder sichtbar, der Inhalt geht also nicht verloren, wird nur überzeichnet.
sg := TStringGrid (Sender);
if (((((ARow+1) mod 2 <> 0) And (ARow<>0) AND (ACol<>0))) OR (((ACol+1) mod 2 <> 0) And (ACol<>0) AND (ARow<>0))) then begin //Färbe jede zweite Zelle zur Übersicht ein (Außer die Erste Spalte/Reihe) sg.canvas.brush.color := cl3DLight; sg.canvas.FillRect(Rect); end; if ((ARow>=sg.Selection.Top) AND (Arow<=Sg.Selection.Bottom) AND (ACol>=sg.Selection.Left) AND (ACol<=Sg.Selection.Right)) then Begin //Färbt die makierten Felder sg.canvas.brush.color := $FACE87; sg.canvas.FillRect(Rect); End; if ((Arow=sg.Row) ANd (ACol=sg.Col)) then Begin //Färbt das selektierte Feld sg.canvas.brush.color := $0045FF; sg.canvas.FillRect(Rect); End; Der Inhalt der Felder kann je nachdem sowohl vom Nutzer als auch vom Programm selbst verändert werden. Ich schätze mal, ich verstehe nicht ganz richtig, was du mit "Alles was dort erscheinen soll..." meinst, aber einen ähnlichen Gedanken hatte ich auch schon, daher stand probehalber mal
Delphi-Quellcode:
am Ende des Events, da ich mir erhofft hatte, durch die "Änderung" des Inhalts würde der Text nocheinmal neu (-> Über die Farbe) geschriben. Es führt aber nur dazu, dass die gesamte Tabellendarstellung flimmert (Wahrscheinlich, da dadurch dasselbe Event immer wieder aufgerufen wird).
for X:=0 To Sg.ColCount do
Begin for Y:=0 To Sg.RowCount do Begin if Sg.Cells[X,Y]<>'' then sg.Cells[X,Y]:=sg.Cells[x,Y]; End; End; |
AW: Datenformular Oberfläche
Vielleicht hilft dir ja ein
Delphi-Quellcode:
wo der Text dann auch gemalt wird.
sg.Canvas.TextRect
Das meinte ich mit "Alles" ;) Siehe dazu auch ![]() |
AW: Datenformular Oberfläche
Moin...,
versuche mal folgendes:
Delphi-Quellcode:
const tFormat = DT_SINGLELINE or DT_CENTER or DT_VCENTER;
var tText: String; begin with (Sender as TStringGrid) do begin tText:= Trim(Cells[ACol, ARow]); // Text der Zelle if (gdFixed in State) then begin // fixe Zelle // feste Zellen bleiben unberührt end // (gdFixed in State) else begin // nicht fixe Zellen if (gdSelected in State) then begin // markierte Zelle Canvas.Brush.Color:= clHighlight; // HintergrundFarbe selektierte Zelle Canvas.Font.Color:= clBlack; // Schriftfarbe end else begin // normale Zelle if Odd(ARow) then // alle ungeraden Zeilen Canvas.Brush.Color:= clMoneyGreen // einfärben else Canvas.Brush.Color:= clInfoBk; // end; // <> (gdFixed in State) Canvas.FillRect(Rect); // Hintergrund zeichnen DrawText(Canvas.Handle, PChar(tText), Length(tText), Rect, tFormat); // Textausgabe // formatierte Textausgabe könnte auch über ExtTextOut() erfolgen end; // nicht fixe Zellen end; // with end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz