AGB  ·  Datenschutz  ·  Impressum  







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

Stringgrid spinnt

Ein Thema von Raucherbein · begonnen am 10. Mai 2005 · letzter Beitrag vom 10. Mai 2005
Antwort Antwort
Raucherbein

Registriert seit: 3. Apr 2005
Ort: Freiberg/Sachsen
2 Beiträge
 
#1

Stringgrid spinnt

  Alt 10. Mai 2005, 11:34
hi leutz!

mir ist grad folgendes problem bei meiner arbeit aufgetaucht:

ich hab ein stringgrid, und im ondrawcell ereignis desselben prüfe ich, ob einzelne zellen leer sind oder nicht, und wenn etwas drin steht, dann soll er diese farblich blau zeichnen!

allerdings läuft da etwas schief! weil solange noch nichts drin steht, funktioniert das einwandfrei! sobald aber in einer zelle irgendwas steht, kann man die ganzen zellen dieser spalte durch anklicken blau färben!

das darf aber nicht sein!

die ersten beiden if funktionen färben zellen, deren kopf ein datum enthält farblich, sobald es zum we gehört!

Delphi-Quellcode:
procedure TfrmMain.grdAnzeigeDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  a : integer;
begin
  if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 6) and not (gdFixed in State) then
  with grdAnzeige do
  begin
    Canvas.Brush.Color := $0000c3ff;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end; //färben des sonnabends

  if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 7) and not (gdFixed in State) then
  with grdAnzeige do
  begin
    Canvas.Brush.Color := clred;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end; //färben des sonntages

  for a := 2 to grdAnzeige.RowCount do //färben der zellen, wenn eintrag
  begin //allerdings nur, wenn nicht zu
    if grdAnzeige.Cells[acol,a] <> 'then //den oberen 2 zeilen gehört!
    with grdAnzeige do
    begin
      canvas.Brush.Color := clskyblue;
      canvas.FillRect(Rect);
      canvas.TextOut(rect.Left + 2, rect.Top + 2, cells[acol, arow]);
    end;
  end;
  
end;
woran liegt das? hat einer ne idee???


mfg matthias
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Stringgrid spinnt

  Alt 10. Mai 2005, 12:17
Moin Matthias,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Ob's hilft weiss ich nicht, aber Du könntest ja mal probieren nicht Cells[] <> '' sondern trim(Cells[]) <> 0 zu nehmen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Stringgrid spinnt

  Alt 10. Mai 2005, 12:22
Da du das im DrawCell machst, ist die Schleife am Schluss imho sinnlos.
Delphi-Quellcode:
procedure TfrmMain.grdAnzeigeDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  a : integer;
begin
  if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 6) and not (gdFixed in State) then
  with grdAnzeige do
  begin
    Canvas.Brush.Color := $0000c3ff;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end; //färben des sonnabends

  if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 7) and not (gdFixed in State) then
  with grdAnzeige do
  begin
    Canvas.Brush.Color := clred;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end; //färben des sonntages

// for a := 2 to grdAnzeige.RowCount do
// begin
    if grdAnzeige.Cells[acol,aRow] <> 'then //STATT "a" "aRow" eingesetzt
    with grdAnzeige do
    begin
      canvas.Brush.Color := clskyblue;
      canvas.FillRect(Rect);
      canvas.TextOut(rect.Left + 2, rect.Top + 2, cells[acol, arow]);
    end;
// end;
 
end;
Ob das allerdings dein Problem löst, habe ich jetzt nicht getestet. Kann aber gut sein, da du kein Else hast, wo du die Farben zurück setzt.
Peter
  Mit Zitat antworten Zitat
Raucherbein

Registriert seit: 3. Apr 2005
Ort: Freiberg/Sachsen
2 Beiträge
 
#4

Re: Stringgrid spinnt

  Alt 10. Mai 2005, 12:38
danke ersteinmal für die antworten!

zu #1: hab ich versucht, macht er trotzdem immernoch!

zu #2: die schelife ist nötig, damit die ersten beiden zeilen da nicht mit hineingezogen werden, da diese fixed sind, und daten enthalten! diese solln extra nicht verändert werden!


mfg matthias
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Stringgrid spinnt

  Alt 10. Mai 2005, 12:51
Hallo Matthias,

Delphi-Quellcode:
procedure TFrmMultiSearch.grdAnzeigeDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  a: integer;
  d: TDate;
  cl: TColor;
begin
  d := StrToDate(grdAnzeige.Cells[aCol, 0]);
  if gdFixed in State then cl := grdAnzeige.FixedColor
  else if DayOfTheWeek(d) = 6 then cl := $0000c3ff
  else if DayOfTheWeek(d) = 7 then cl := clRed
  else if grdAnzeige.Cells[aCol, aRow] <> 'then cl := clSkyBlue
  else cl := clWhite;

  with grdAnzeige do
  begin
    Canvas.Brush.Color := cl;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Noinini
Noinini

Registriert seit: 12. Aug 2003
Ort: Kempen
38 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Stringgrid spinnt

  Alt 10. Mai 2005, 13:00
Hi Matthias,

die Lösung von Jasocul ist schon richtig, Du musst nur statt der Schleife eine Abfrage machen, dass die Zeile richtig ist:
Delphi-Quellcode:
procedure TfrmMain.grdAnzeigeDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  a : integer;
begin
  if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 6) and not (gdFixed in State) then
  with grdAnzeige do
  begin
    Canvas.Brush.Color := $0000c3ff;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end; //färben des sonnabends

  if (dayoftheweek(strtodate(grdAnzeige.Cells[acol, 0])) = 7) and not (gdFixed in State) then
  with grdAnzeige do
  begin
    Canvas.Brush.Color := clred;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
  end; //färben des sonntages

// for a := 2 to grdAnzeige.RowCount do
// begin
    if aRow >= 2 then
    begin
      if grdAnzeige.Cells[acol,aRow] <> 'then //STATT "a" "aRow" eingesetzt
      with grdAnzeige do
      begin
        canvas.Brush.Color := clskyblue;
        canvas.FillRect(Rect);
        canvas.TextOut(rect.Left + 2, rect.Top + 2, cells[acol, arow]);
      end;
    end;

end;
Viele Grüße

Iris
Iris
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:01 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