Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu TStringGrid (https://www.delphipraxis.net/152479-frage-zu-tstringgrid.html)

DelTurbo 23. Jun 2010 23:55

Frage zu TStringGrid
 
Hi,

ich habe folgende frage zu einer celle in einem StringGrid. Wie kann ich z.b. in einer bestimmen zelle ein Dynamisch erstelltes objekt (z.b. eine ProgressBar oder Button oder sonstwas) darstellen. Im moment geht es mir um eine ProgressBar. Aber ich möchte die frage allgemein halten, wer weiss was mir noch einfällt :)

Ich habe ja mit folgenden code zugriff beim zeichen. In diesem fall um Text zu zentrieren. Kann man an dieser stelle dem irgendwie "sagen" er soll ein anderes objekt darstellen?

Vielen dank im voraus

Delphi-Quellcode:
procedure TForm1.DrawTradedCells(Sender: TObject; ACol, ARow: Integer;Rect: TRect; State: TGridDrawState);
var
  s: string;
begin
   if ( ARow>0 ) then begin
      if ( (ACol=1) OR (ACol=3) OR (ACol=4)) then begin
        s := Table.Cells[ACol, ARow]; // Text der Zelle holen
        Table.Canvas.FillRect(Rect); // Zelle leer überzeichnen
        DrawText(Table.Canvas.Handle, PChar(s), Length(s), Rect, DT_SINGLELINE or DT_Center or DT_VCENTER); // Text zentriert zeichnen
      end;
   end;

end; {TForm1.DrawTradedCells(Sender: TObject; ACol, ARow: Integer;Rect: TRect; State: TGridDrawState)}

hoika 24. Jun 2010 09:08

AW: Frage zu TStringGrid
 
Hasllo,

schau dir das mal an.

http://www.swissdelphicenter.ch/de/showcode.php?id=406


Heiko

DelTurbo 24. Jun 2010 15:36

AW: Frage zu TStringGrid
 
Danke, klappt. So kann man ihm ja (so wie ich das sehe) jedes objekt "unterjubeln". Genau sowas hab ich gesucht.

DelTurbo 24. Jun 2010 16:29

AW: Frage zu TStringGrid
 
Hmm,

ne kleine hilfe bräuchte ich aber noch. Und zwar hatte ich das eben mit der "normalen" ProgressBar probiert. Das klappte. Nun habe ich mal andere probiert (z.b. RzProgressBar, JvgProgress, JvStarfield usw.) und die liegen komigerweise HINTER dem Grid. Mache ich da was falsch?

Danke im Voraus

DeddyH 24. Jun 2010 16:33

AW: Frage zu TStringGrid
 
Kannst Du sie mit BringToFront nach vorne holen?

DelTurbo 24. Jun 2010 16:45

AW: Frage zu TStringGrid
 
Nein, leider nicht. Ich habe grade gemerkt das wenn ich diese sachen im Editor aufs grid lege, liegen sie auch dahinten. Auch wenn ich unter "Elements/nach vorne setzen" mache bleibt es dahinter.

Ich es habe auch andersrum probiert. Das Grid nach hinten legen. Keine wirkung.

DeddyH 24. Jun 2010 16:48

AW: Frage zu TStringGrid
 
Hmmm... man könnte noch versuchen, das Grid als Parent zu deklarieren, vielleicht bringt das etwas.

DelTurbo 24. Jun 2010 16:54

AW: Frage zu TStringGrid
 
Schon versucht. Das war meine erste idee. Sachen die mir einfallen probier ich immer erst aus, bevor ich poste. Die dinger bleiben dahinter :gruebel:

DeddyH 24. Jun 2010 16:58

AW: Frage zu TStringGrid
 
Merkwürdig :gruebel:

DelTurbo 24. Jun 2010 17:10

AW: Frage zu TStringGrid
 
Jo, ich peil das erst recht nicht warum das so ist. Aber man kann es auch im editor sehen. Ich habe mein Grid und will dann z.b. JvgProgress drauflegen. Geht nicht. Es liegt dahinter. Mit "normalen" sachen geht es. z.b. Buttons, Radio, Groupboxen usw.

Ich hab grad mal ein Panel draufgelegt, und dadrauf ein JvgProgress, nun scheint es oben zu liegen. Aber das muss ich grad "richtig" testen, ob es wirklich oben ist. Das wär mir ja egal wenn ich erst ein Panel und dann die sachen auf das panel legen muss.

EDIT:
Rückmeldung. So klappt es. Also die sachen die man eigentlich nicht sieht einfach auf ein Panel legen, und dann das Panel an die Position....

DelTurbo 10. Jul 2010 14:54

AW: Frage zu TStringGrid
 
Hi,

sorry aber ich muss das Thema nochmal "aufwärmen". Ich habe das problem das wenn das Panel in der Zelle liegt, kein kommando zum neuzeichen kommt. z.b. wenn ich scrolle oder ähnlich.

Hat da vielleicht einer ne idee wie ich den "zwingen" kann die zelle neu zu zeichnen?

Beispiel:
Ich habe ein Grid mit 2 Zeilen und 5 Spalten. In spalte 4 ist mein Panel drinne. Nun kommt das Draw leider nicht für spalte 4. Nur für die anderen.

Danke im Voraus

idefix2 11. Jul 2010 13:05

AW: Frage zu TStringGrid
 
Wie zeichnest Du die Zellen? ein normales Stringgrid zeichnet doch meines Wissens nicht selbstständig Komponenten, die Du einzelnen Zellen (wie?) zuordnest. Beim Erzeugen wird sich das panel um seine untergeordneten Komponenten einmal kümmern, aber danach bekommt es von Änderungen im Grid wahrschienlich nichts mit.


edit - Blödsinn, habe die ersten Posts nicht richtig gelesen.

DelTurbo 18. Jul 2010 13:44

AW: Frage zu TStringGrid
 
Hat keiner ne idee? Oder geht das garnicht?

Ich bin nun hingegangen und habe den inhalt der zelle, also das panel, einen pixel kleine gemacht. Damit wird die zelle wieder gezeichnet. Leider nicht wenn es die erste oder letzte zelle des grids ist. Warum das so ist, weiss ich nicht.

alzaimar 18. Jul 2010 13:47

AW: Frage zu TStringGrid
 
Code sagt mehr als 1000 Worte.
Erstelle ein kleines Demo-Projekt, das das Problem veranschaulicht und poste es hier. Das vereinfacht uns, Dir zu helfen.

DelTurbo 29. Jul 2010 22:51

AW: Frage zu TStringGrid
 
Da ich "meine" Threads immer versuche zu schliessen, hier die antwort.

Man(n) nimmt ein Panel und leg das was man anzeigen möchte auf das Panel. In meinem fall eine progressbar. Dann hängt man sich in OnDrawCell rein und arbeitet dann mit .PaintTo. Nicht wie anfangs beschrieben die Position des Panels ändern.

Delphi-Quellcode:
if ((ARow=10) AND (ACol=2)) then begin
  Panel1.PaintTo(StringGrid1.Canvas.Handle,Rect.Left,Rect.Top);
end;
Da hat auch den vorteil, das man wieder auf die celle klicken kann.

Ich hoffe das hilft vielleicht mal jemanden. Auf jeden fall ist der Thread nun auch "sauber" beendet.

Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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