AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

nochmals StringGridDrawcell

Ein Thema von fl63 · begonnen am 26. Aug 2009 · letzter Beitrag vom 29. Aug 2009
Antwort Antwort
Seite 2 von 3     12 3      
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#11

Re: nochmals StringGridDrawcell

  Alt 26. Aug 2009, 16:51
Ich kenne das JediGrid zwar auch net, aber folgendes sollte auch damit funktionieren. Sonst teste mal einfach mit nem Standard Grid
Delphi-Quellcode:
procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
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 // feste Zelle?
      Canvas.Brush.Color:= clBtnFace; // HintergrundFarbe

      end else if (gdSelected in State) then begin // markierte Zelle
      Canvas.Brush.Color:= clHighlight;
      Canvas.Font.Color:= clBlack;

     end else begin // normale Zelle
      Canvas.Brush.Color:= clWindow;
      if tText = '2then Canvas.Brush.Color:= clgreen;
  // ...
  // ...
    end; // <> (gdFixed in State)
    Canvas.FillRect(Rect); // Hintergrund zeichnen
    DrawText(Canvas.Handle, PChar(tText), Length(tText), Rect, tFormat); // Textausgabe
  end; // with
end;
evtl. musst Du noch ACol, ARow in Col, Row umbenennen. DefaultDrwaing auf True

LG Mario
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#12

Re: nochmals StringGridDrawcell

  Alt 27. Aug 2009, 14:38
Hallo Hobby-Programmierer,
Ich habe deine Methode ausprobiert und komme auch mit Delphi Standard SG zum Selben Ergebnis

4spaltige Wiederholung der Zelle 1,1 und keine Farbe

Ich werde es weiter Probieren Vielen Dank.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#13

Re: nochmals StringGridDrawcell

  Alt 27. Aug 2009, 17:55
Zitat von fl63:
4spaltige Wiederholung der Zelle 1,1 und keine Farbe
dann liegt das problem wahrscheinlich an acol und arow:
Zitat:
procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
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

...
das A vor Acol und Arow ist sehr wichtig (du mußt es auch noch im interfaceTeil ändern)

Ansonsten verwendest du mit with (sender asstringgrid) do ... cells[col,row] nicht die beiden Übergebenen col und row sondern sg1.col und sg1.row = die aktuell selektierte Zelle. Damit steht dann auch immer das gleiche in allen Zellen drin.

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#14

Re: nochmals StringGridDrawcell

  Alt 27. Aug 2009, 19:31
siehe Anhang

[edit] Das evtl. umbenennen von ACol, ARow bezog sich auf das JediGrid.
Angehängte Dateien
Dateityp: zip testgrid_348.zip (1,4 KB, 9x aufgerufen)
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#15

Re: nochmals StringGridDrawcell

  Alt 28. Aug 2009, 14:31
Hallo Keldorn, Hallo Hobby-Programmierer,

Endlich Farbe im Grid

Aber

ich verdeutliche mal mein Problem

Cell[2,0] = FixedRow
Cell[2,1] = 1 Ausgangswert
Cell[2,2] = 2 Vergleich mit Cell 2,1 ==> Zelle 2,2 Farbe Grün
Cell[2,3] = 3 Vergleich mit Cell 2,2 ==> Zelle 2,3 Farbe Grün
Cell[2,4] = 2 Vergleich mit Cell 2,3 ==> Zelle 2,4 Farbe Rot !!!
Cell[2,5] = 3 Vergleich mit Cell 2,4 ==> Zelle 2,5 Farbe Grün !!


In der Rechnen Prozedur habe ich das versucht anzudeuten
Der Code ist nicht vollständig und fehlerhaft die Logik dahinter meiner Ansicht nach dennoch richtig.

1. wandle String in extended um (weil Kommazahlen vorhanden)
2. Vergleiche extended Zahlen
3. weise Farbe zu und färbe Grid

Ich hoffe auf eure weitere Hilfe.

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#16

Re: nochmals StringGridDrawcell

  Alt 28. Aug 2009, 15:21
Hallo,

das Ereignis OnDrawCell wird automatisch ausgelöst, wenn eine Zelle neu gezeichnet werden muss, wobei das Ereignis für jede Zelle einzeln ausgelöst wird. Schreibst Du Code für die Behandlung des OnDrawCell-Ereignisses musst Du das immer beachten.
Die Parameter ACol und ARow liefern Dir die aktuell zu zeichnende Adresse, im Parameter Rect sind die Koordinaten der Zelle enthalten. Möchtest Du nun auf Grund von Zellinhalten einfärben ist die Bedingung relativ zur aktuell zu zeichnende Zelle zu stellen.

Wenn ich Dein Beispiel richtig interpretiere soll eine Zelle rot eingefärbt werden, wenn der Inhalt größer als der in der darüberliegenden Zelle ist.

ARow = 0 -> erste Zeile ist fixed.
ARow = 1 -> zweite(erste Wertzeile) Zeile muss nicht beachtet werden.
ARow >= 2 -> dritte Zeile und weitere vergleichen mit Zelle oberhalb

Daraus ergib sich folgender grober Ansatz:
Delphi-Quellcode:
if ARow >= 2 then
  if StrToFloat(Grid.Cells[ACol,ARow]) > StrToFloat(Grid.Cells[ACol,ARow -1]) then
    begin
    //Farbe setzen
    //Zelle zeichnen
    //Text ausgeben
    end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: nochmals StringGridDrawcell

  Alt 28. Aug 2009, 15:22
Machs dir einfach und übersichtlich, erstelle für jede Aufgabe eine eigene Funktion.
Delphi-Quellcode:
function CalcCellColor(AGrid: TStringGrid; ACol, AROw: Integer): TColor;
var
  d1, d2: Double;
begin
  Result := AGrid.Color;
  if ARow > 1 then
  begin
    try
      d1 := StrToFloat(AGrid.Cells[ACol, AROw - 1]);
      d2 := StrToFloat(AGrid.Cells[ACol, AROw]);
      if d1 < d2 then Result := clGreen
      else if d1 > d2 then Result := clRed;
    except
    end;
  end;
end;

// normale Zelle
Canvas.Brush.Color:= CalcCellColor(Sender as TStringGrid, ACol, ARow);
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: nochmals StringGridDrawcell

  Alt 28. Aug 2009, 15:32
Hallo,

Lannes hat Recht.
Du hast das DrawCell nicht verstanden.

Unter Windows rufst nicht du ein DrawCell auf,
sondern Windows, du reagierst nur drauf !

Fang mal mit einem einfachen Bsp. an.

Erzeuge durch Doppelklick auf das Ereignis OnDrawCell
eine Methode GridXDrawCell (macht Delphi).
Dort rufst du dein SGDrawCell (?) auf.


Heiko
Heiko
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#19

Re: nochmals StringGridDrawcell

  Alt 28. Aug 2009, 19:00
vielleicht so
Delphi-Quellcode:
if ARow > 1 then begin
  if StrToFloatDef(Cells[ACol, ARow], 0.0) > StrToFloatDef(Cells[ACol, ARow - 1], 0.0) then
    Canvas.Brush.Color:= clgreen
   else
    Canvas.Brush.Color:= clred;
end;
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
fl63

Registriert seit: 30. Mär 2008
124 Beiträge
 
#20

Re: nochmals StringGridDrawcell

  Alt 29. Aug 2009, 12:33
Hallo Helfer,

@ Lannes und hoika

Ich würde es ja auch gerne selber schreiben, wenn ich davon genug wüßte. vielleicht könnt ihr mir ein umfangreiches Tutorial empfehlen in dem Stringgrid gut beschrieben wird.

Ich hab den Tip von Blub eingebaut und bekomme jetzt ab der Zelle(2,3) die erste FarbZeile geliefert. Warum die ganze Zeile farbig wird... Ich muß mich wohl mit abfinden.

Warum Zeile 1 ohne Farbe ist ist klar. Bei Zeile 2 sieht das schon anders aus??

Ansonsten bedanke ich mich für die schnelle Hilfe.

Frank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz