Autor Beitrag
falken
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 27.02.06 21:42 
Moinsen,

hoffe Ihr könnt mir wieder so gut helfen wie die 100.000 andern male.

Ich hab ein StringGrid mit 100x15 Zellen.

Ich suche über eine edit feld in der 13 ten spalte und las mir in einer liste die zeilennummer ausgeben.

Is aber mist weil das ist zuviel arbeit, nun wolte ich die entsprechenden zeilen einfärben.

Habe da was aus dem Forum geht aber nicht ! Sprich Prog läuft ohne fehler nur man sieht nix von farbe ! in den zellen !

Wenn mir einer sagt wo das brett vorm kopf sitz bitte "!


ausblenden Delphi-Quelltext
1:
2:
 StringGrid1.Canvas.Font.Color := clRed;
  StringGrid1.Canvas.TextRect(Rect(-1,-1,10,10),2,2,StringGrid1.Cells[13,stringgrid_counter]);
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 27.02.06 23:51 
Moin!

Die Suchfunktion, dein unbekannter Freund und Helfer... :wink: hätte unter anderem dieses hier gebracht. :roll:

cu
Narses
falken Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 28.02.06 21:27 
Titel: hmmmm thx ! aber jetz
so nun habe ich mir was aus der BD help und aus dem Forum teil was gebastelt und heh ich hab ein rechteck das rot ist mit dem meinem text .

Aber nicht an der stelle wo es hin soll .


ausblenden Delphi-Quelltext
1:
2:
3:
4:
 TheRect := Rect(3,3,73,13);
  StringGrid1.Canvas.TextRect(TheRect,1,1,StringGrid1.Cells[13,13]);
  StringGrid1.Canvas.Brush.Color := clRed;;
  StringGrid1.Canvas.FrameRect(TheRect);



nun ? wo drann leigt es das er doe position nimmet die relativ zum ganzen grid ist und nicht von der zelle die ich färben will ?

denk fehler meiner seitz ?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 28.02.06 21:42 
Moin!

Ähm, hast du den Beitrag mal gelesen, auf den ich da verwiesen habe? :wink:

Das ganze muss schon ins OnDraw, sonst wird das nix...

cu
Narses
uwewo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 154



BeitragVerfasst: Di 28.02.06 21:45 
Vielleicht hilft Dir das hier

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


Uwe
falken Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 01.03.06 20:43 
Titel: hmmm ne
erst mal thx @ uwe !

@ Narses dann sach mir doch mal bitte was mit OnDraw gemeint ist.
Bin von Hausaus nur Elektriker auf dem weg zum Techniker.

Habe mich jetzt zu dem Thema mit meine Bücher und er BD hilfe rumgeschlagen !
Ich kann mir denken wo der fehler liegt weis aber nicht wie ich dem zuwerke gehen kann.

Im enddefek möchte ich nur bestimme zellen oder dann die ganze zeile in der die zelle vor kommt makierne !

Würde mich freuen wenn mir wer konstruktiv hilft. !

hier der code ! wie er jetz ist !

und ich will das nicht als funktion haben ! wenns geht

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:
procedure TForm6.Button2Click(Sender: TObject);
begin

suche := edit1.Text  ;
stringgrid_counter := 1 ;
ListBox2.Clear;
ListBox1.Clear;
while (stringgrid_counter <> 101) do begin

gitter_string := StringGrid1.Cells[13,stringgrid_counter];

 x:=0;
 x := Pos(suche,gitter_string);
 if x <> 0 then begin
 zeile := IntToStr(stringgrid_counter);
 ListBox2.Items.Add(gitter_string);
 ListBox1.Items.Add(zeile);


  TheRect := Rect(3,3,73,13);
  StringGrid1.Canvas.TextRect(TheRect,1,1,StringGrid1.Cells[13,stringgrid_counter]);
  StringGrid1.Canvas.Brush.Color := clRed;;
  StringGrid1.Canvas.FrameRect(TheRect);


 end;

Inc(stringgrid_counter);
coun := IntToStr(stringgrid_counter);

end;
    end;



thx björn
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 02.03.06 00:31 
Moin!

Deine Vorstellung passt nicht zur Realität, da wird das Problem liegen... :wink:

Du kannst nicht zu einem von dir gewählten Zeitpunkt den Inhalt des StringGrids anpassen, sondern mußt praktisch einen Ereignishandler schreiben, der das Ereignis "Neuzeichnen" nach deinen Wünschen gestaltet. Das Ereignis OnDrawCell tritt ein, wenn eine Zelle des StringGrids gezeichnet werden soll. Mit der Eigenschaft .DefaultDraw kannst du steuern, ob - bevor der Handler aufgerufen wird - der normale "Standard-Inhalt" gezeichnet werden soll. So brauchst du nicht alles selbst zu zeichnen, sondern nur die Zellen, die du auch verändern willst. Der Code von user profile iconuwewo zeigt das doch recht nett, schau dir das nochmal genau an. Ereignisorientiert denken! :wink:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
falken Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 05.03.06 11:32 
Titel: danke danke !
so nach dem ich jetzt 2 tage pause gemacht habe . und noch mal mit dem code gearbeit habe lüpt es zwar nicht sowie ich
mir das dacht. deswgen stimmt es auch das du sagst das mein vorstelllungen nicht mit der realitaät übereinstimmen.

Thx für die OnDraw erlärung. wieder was dazu gelernt.

Danke für eure hilfe.

Noch was was eigenlich der kern meine frage war. ist warscheinlich nicht so rüber gekommen was an mir liegt, und kann das leider nich am getsellten code erkenne.

Muss ich mir von jedem rechteck die position errechnen !???

Das habe ich jetzt gemacht ? Wenn nicht habe ich da noch was nicht ganz gecheckt aber egal ich lehrne noch.


PS: Was muss ich machen damit beim scrollen alles schön bunt bleib ! denke das ich alles in eine funktion paken muss die das alles wieder neu zeichent beim scrollen ! denke irh weist was ich meine


Noch was der Text aus dem rechteck ist jetzt nicht mehr drinn war aber vorher der fall ! ????

Moderiert von user profile iconChristian S.: Beiträge zusammengefasst
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.03.06 12:06 
Moin!

Ähm, mal so vorab: IMHO stimmt das Verhältnis von neuem Text zu Quotes in deinen Beiträgen nicht so ganz, findest du nicht... ? :wink:

user profile iconfalken hat folgendes geschrieben:
Muss ich mir von jedem rechteck die position errechnen !???

Nein, du bekommst den Clipping-Bereich übergeben, schau dir doch mal genau die Parameter des Handlers an:
ausblenden Delphi-Quelltext
1:
2:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;  
  Rect: TRect; State: TGridDrawState);

Das ist der Bereich, der (in diesem Aufruf des Handlers) neu gezeichnet werden soll, ACol und ARow sind die Grid-Koordinaten und State (ist eine Menge!) gibt den Zustand (selektiert, fokussiert, etc.) an.

user profile iconfalken hat folgendes geschrieben:
Noch was der Text aus dem rechteck ist jetzt nicht mehr drinn war aber vorher der fall ! ????

Den mußt du mit einem TextOut() schon selbst auf das Canvas malen, wenn du den Hintergrund (das Default-Drawing) quasi "überschrieben" hast... :wink:

user profile iconfalken hat folgendes geschrieben:
Was muss ich machen damit beim scrollen alles schön bunt bleib ! denke das ich alles in eine funktion paken muss die das alles wieder neu zeichent beim scrollen !

Das Erledigt die VCL alles ganz automatisch für dich, wenn du einen korrekten Handler geschrieben hast. Such doch mal hier im Forum nach Beispielcode dazu, es gibt hier echt einen Haufen davon. :wink:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.