Autor Beitrag
Éde1987
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 00:34 
Also ich habe schon wieder ein Problem!
Ich will die Farbe meines StringGrids ändern, was ja dachte ich nicht so schwer sein kann. Da habe ich mich aber sehr doll getäuscht. Ich kapier auch keinen der anderes Themen deshalb nochmal ein neues. Bitte nochmal für ganz doofe erklären!
Danke...

Bsp:
ausblenden Delphi-Quelltext
1:
StringGrid1.Cells[1,1] --> sei bitte rot					

geht nicht :(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 00:41 
Tja, da gibts nix fertiges für, da musst du das selber zeichnen. Aber die Frage war ja nun schon oft da...
Éde1987 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 00:44 
Stimmt schon aber ich bin noch ein totaler newbe was programmieren angeht deshalb brauche ich hilfe und das fachschinesisch kapier ich net
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 00:47 
Fachchinesisch? Naja...
www.delphi-forum.de/...c.php?t=56605#339406
Dort wird jetzt nur der Hintergrund gefärbt, aber etwas weiter oben steht auch die Textausgabe...
Aber da sehe ich ehrlich gesagt kein Fachchinesisch. Egal, probier das mal so aus, wie in dem verlinkten Beitrag...
Éde1987 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 00:54 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ((Acol = 13and (ARow = 13))
  then
  begin
  StringGrid1.Canvas.Brush.Color := clRed;;
  StringGrid1.Canvas.FillRect(Rect);
  end;
end;




ok das ist schon fast ganz verständlich nur nochmal ne frage:
was bedeutet das State: TGridDrawState und wofür bracuhe ich das?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 01:02 
Das brauchst du erstmal nicht so dringend... Aber wenn du es wissen willst, warum siehst du nicht in der Hilfe nach?
Zitat:
TGridDrawState represents state information about the cell of a grid that is being rendered. It is a set that includes 0 or more of the following:
Value Meaning
gdSelected
The cell is currently selected.

gdFocused
The cell has input focus.

gdFixed
The cell is in the fixed region of the grid.

Du kannst danach entscheiden, ob du die Zelle anders zeichnen musst, weil sie zum Beispiel gerade markiert ist.
Éde1987 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 01:06 
man ich kapiere es nicht!
sagen wir mal ich habe mein StringGrid und will das Kästchen an der Stelle x,y rot malen wie geht das? da muss es doch was einfaches geben!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 01:09 
Ähh, du hast den Quelltext doch gerade selbst nochmal gepostet... Mehr ist das nicht... Da muss nur nochmal wie etwas über diesem Quelltext im von mir verlinkten Thread stand noch der Text gezeichnet werden. Aber die Einfärbung ist nur das, was du schon hast.
Du musst allerdings auch das Ereignis OnDraw im Objektinspektor damit verknüpfen. Deshalb heißt die Prozedur ja auch StringGrid1DrawCell... OnDrawCell in StringGrid1 eben...
Éde1987 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 01:15 
ok danke ist nett das du es versucht hast.
ich kann es anscheinend nicht.
ausblenden Delphi-Quelltext
1:
2:
StringGrid1.Canvas.Brush.Color := clRed;;
StringGrid1.Canvas.Rectangle(ACol,ARow);


wie kann ich jetzt ACOL und AROW eine reieh bzw spalte zuordnen wenn das nicht geht dann bekomme ich es wohl nicht hin.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 01:21 
Das geht so nicht. Du musst darauf regieren, wenn eine bestimmte Zelle neu gezeichnet werden muss, weil sie zum Beispiel von einem anderen Fenster verdeckt war.

Jetzt mal ganz von vorne:
Klick mal dein StringGrid an. Dann geh in den Objektinspektor links und klick dort auf Events. Jetzt such dort OnDrawCell. Klick doppelt drauf. Jetzt landest du im Quelltext und dort befindest du dich jetzt innnerhalb einer Prozedur, die genauso heißt wie hier im Beispiel.
Dort ergänzt du dann den Quelltext, den du eben zitiert hast...
Éde1987 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 01:32 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
//Beschriftung
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
For i:=1 to 8 do
for j:=1 to 8 do
Feld[j,i]:=' ';
for i:=1 to 8 do
Begin
StringGrid1.Cells[0,i]:=chr(64+i);
StringGrid1.Cells[i,0]:=inttostr(i);
StringGrid1.Cells[0,0]:='%';
end;
end;



//Schiffe setzen
procedure TForm1.Button1Click(Sender: TObject);
var     i,j,x,y:integer;
        Label Schiff;
  begin
    Randomize;
    For i:=1 to 8 do
      For j:=1 to 8 do
      Feld[j,i]:=' ';
    Schiff:
    For i:=1 to 8 do
      For j:=1 to 8 do
        Feld[j,i]:=' ';
    For i:=1 to 5 do
      begin
        x:=Random(8)+1;
        y:=Random(8)+1;
        if Feld[x,y]='s' then goto Schiff
        else Feld[x,y]:='s';
      end;
    For i:=1 to 8 do
      For j:=1 to 8 do
        StringGrid1.Cells[j,i]:=Feld[j,i];
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;



procedure TForm1.Button3Click(Sender: TObject);
var   x:char;
      i,j,y,z:integer;
      Rect: TRect;
      ACol,ARow:String;
  begin
    x:=Edit1.text[1];
    Case x of
      'A': z:=1;
      'B': z:=2;
      'C': z:=3;
      'D': z:=4;
      'E': z:=5;
      'F': z:=6;
      'G': z:=7;
      'H': z:=8;
      'a': z:=1;
      'b': z:=2;
      'c': z:=3;
      'd': z:=4;
      'e': z:=5;
      'f': z:=6;
      'g': z:=7;
      'h': z:=8;
    end;
    y:=strtoint(edit2.Text);
    if Feld[y,z]='s' then
      begin
        Feld[y,z]:='T';
        StringGrid1.Cells[j,i]:=Feld[j,i];
      end
    else Feld[y,z]:='X';
    For i:=1 to 8 do
      For j:=1 to 8 do
        StringGrid1.Cells[j,i]:=Feld[j,i];
    Edit1.Clear;
    Edit2.Clear;
  end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ((Acol = 13and (ARow = 13))
  then
  begin
  StringGrid1.Canvas.Brush.Color := clRed;;
  StringGrid1.Canvas.FillRect(Rect);
  end;
end;


so das ist mein Quelltext. Das soll mal sowas wie Schiffe versenken werden und ich vesuche nun das Feld welches ich eigebe rot auszumalen aber es geht immer noch nicht du kannst es dir ja mal angucken wenn du lust hast. Ich danke schonmal im vorraus für die Mühe auch wenn du nun keine Lust mehr hast noch mehr zu helfen. Das könnte ich nömlich gut verstehen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.12.06 02:40 
Du hast offenbar nicht ganz verstanden, was der Quelltext eigentlich macht ;-).
Der zeichnet die Zelle in Zeile 13 und Spalte 13 rot... Und wenn du woanders eine Zelle rot haben willst, dann musst du eben diese if-Abfrage ändern...
In ACol steht die Spalte und in ARow die Zeile. So, und die Färbung passiert eben nur, wenn beides 13 ist. Wenn du also die ganze Spalte 12 rot haben willst, dann musst du schreiben: if ACol = 12 then

Du musst hier eben wissen, ob die mit ACol und ARow angegebene Zelle (die gerade neu gezeichnet werden muss) rot sein soll oder nicht...
Wann welche Zelle gezeichnet wird weißt du nicht, es kann also auch die mittlere zuerst gezeichnet werden. Du bekommst übergeben, welche gerade neu gezeichnet werden soll und musst darauf reagieren, dass diese spezielle Zelle neu gezeichnet werden muss...
Éde1987 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Sa 23.12.06 10:51 
Also nur nochmal für alle anderen ich habe es jetzt so gemacht...
ausblenden Delphi-Quelltext
1:
2:
StringGrid1.Canvas.Brush.Color := clRed;
StringGrid1.Canvas.Rectangle(y*31,z*31,(y+1)*31,(z+1)*31);

da das ganze andere zeug bei mir nicht geklappt hat!

aber ich danke jaenicke für seine Mühe auch wenn sie mir als newbe zu hoch war.