Results 1 to 5 of 5

Thread: Stringgrid tekst kleur

  1. #1

    Stringgrid tekst kleur

    In een stringgrid heb ik items staan welke verwijzen naar een bestand wat geprint dient te worden.
    Dit werkt perfect. Wat kan gebeuren is dat een bestand niet bestaat, het bestand wat niet bestaat wordt netjes naar een
    memo veld geschreven.
    Nu wil ik eigenlijk dat als het bestand niet gevonden wordt de tekst van de cel in het stringgrid rood kleurt....ik ben al een geruime tijd
    aan het zoeken, maar kan helaas niks vinden.

    Iemand een oplossing.
    Onderstaand de code welke de bestanden print.

    Alvast bedankt!

    Delphi Code:
    1. procedure TForm1.btn3Click(Sender: TObject); //print
    2. var
    3. i : Integer;
    4. locatie, naam, printnaam : string;
    5. begin
    6.   locatie := edt2.Text;
    7.   memo1.Lines.Clear;
    8.   begin
    9.      for i := 1 to StringGrid1.RowCount -1 do
    10.       begin
    11.         if Length(StringGrid1.Cells[1,i]) > 1 then
    12.         naam := StringGrid1.Cells[1,i];
    13.         printnaam := locatie + '\' + naam;
    14.         if FileExists(printnaam + '.pdf') then
    15.         begin
    16.           PrintDocument(printnaam + '.pdf')
    17.         end
    18.         else
    19.           begin
    20.             // hier code voor tekstkleur naar rood
    21.             memo1.Lines.Add(printnaam + '.pdf niet gevonden')
    22.           end;
    23.       end;
    24.   end;
    25. end;
    It deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoatnt tihng is taht the frist and lsat ltteer are at the rghit pclae.

  2. #2
    Registered User TOPX's Avatar
    Join Date
    Apr 2016
    Location
    Bogotá
    Posts
    7
    U kunt een OnDrawCell event toewijzen aan de StringGrid, en zijn handler als volgt programmeren:
    Delphi Code:
    1. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    2. var
    3.   CelTekst: String;
    4. const
    5.   Grens = 2;
    6. begin
    7.   CelTekst := StringGrid1.Cells[ACol, ARow];
    8.  
    9.   if ACol = 1 then // bestandsnaam kolumn
    10.   begin
    11.     if not FileExists(edt2.Text + '\' + CelTekst) then
    12.     begin
    13.       StringGrid1.Canvas.Font.Color := clRed;
    14.     end
    15.     else
    16.     begin
    17.       StringGrid1.Canvas.Font.Color := clWindowText;
    18.     end;
    19.   end;
    20.  
    21.   StringGrid1.Canvas.FillRect(Rect);
    22.   StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top + Grens, CelTekst);
    23. end;
    -
    ... dank u voor het verdragen van mij met mijn arme Nederlanders.

  3. #3
    Persoonlijk zou ik die FileExists niet in draw events gebruiken. Je zou eigenlijk achter ieder gridrecord een object moeten hangen en die de boolean property: IsFileExists moeten geven, zodat je daarop kunt checken in je draw code. Als je bestand nu ergens op een netwerk staat gaat dat de performance van je paintcode niet vooruit helpen(zeker als hij het bestand niet kan vinden uit eindelijk). En, aangezien die drawcode best vaak wordt afgeschoten, ga je dat best merken.

    Verder zou ik het volgende doen:

    Code:
    FileExists(edt2.Text + '\' + CelTekst)
    Code:
    // edt2 wel gevuld met een geldige directory? (DirectoryExists)
    Filename := IncludeTrailingPathDelimiter(edt2.Text) + CelTekst;
    
    //Checkups...

  4. #4
    Quote Originally Posted by TOPX View Post
    U kunt een OnDrawCell event toewijzen aan de StringGrid, en zijn handler als volgt programmeren:
    Delphi Code:
    1. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    2. var
    3.   CelTekst: String;
    4. const
    5.   Grens = 2;
    6. begin
    7.   CelTekst := StringGrid1.Cells[ACol, ARow];
    8.  
    9.   if ACol = 1 then // bestandsnaam kolumn
    10.   begin
    11.     if not FileExists(edt2.Text + '\' + CelTekst) then
    12.     begin
    13.       StringGrid1.Canvas.Font.Color := clRed;
    14.     end
    15.     else
    16.     begin
    17.       StringGrid1.Canvas.Font.Color := clWindowText;
    18.     end;
    19.   end;
    20.  
    21.   StringGrid1.Canvas.FillRect(Rect);
    22.   StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top + Grens, CelTekst);
    23. end;
    -
    Ik heb de code iets aangepast en het werkt. Alleen krijg ik dubbele letters te zien, is het ook mogelijk te maken dat de bovenste rij niet meegenomen wordt in de check, zodat deze altijd zwart blijven.

    Delphi Code:
    1. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
    2.   Rect: TRect; State: TGridDrawState);
    3. var
    4.   CelTekst : String;
    5. const
    6.   grens = 2;
    7. begin
    8.   CelTekst := StringGrid1.Cells[ACol, ARow];
    9.   if ACol = 1 then // bestandsnaam kolumn
    10.   begin
    11.     if not FileExists(IncludeTrailingPathDelimiter(edt2.Text) + CelTekst + '.pdf') then
    12.     begin
    13.       StringGrid1.Canvas.Font.Color := clRed;
    14.     end
    15.     else
    16.     begin
    17.       StringGrid1.Canvas.Font.Color := clWindowText;
    18.     end;
    19.   end;
    20.   StringGrid1.Canvas.FillRect(Rect);
    21.   StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top + Grens, CelTekst);
    22. end;

    Schermafdruk
    Name:  Snap1.jpg
Views: 322
Size:  32.7 KB
    It deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoatnt tihng is taht the frist and lsat ltteer are at the rghit pclae.

  5. #5
    Heb de code aangepast.
    De dubbele letters zijn weg, en er wordt pas vanaf rij 1 gekleurd :-)

    Nu nog even gaan stoeien met het voorbeeld wat PSTERK voorstelt, kijken of ik dit voor elkaar krijg.
    (Kun je mischien een klein stukje voorbeeld code geven ??)

    Delphi Code:
    1. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
    2.   Rect: TRect; State: TGridDrawState);
    3. var
    4.   CelTekst : String;
    5. const
    6.   grens = 2;
    7. begin
    8.   CelTekst := StringGrid1.Cells[ACol, ARow];
    9.   if (ACol = 1) and (ARow > 0) then // bestandsnaam in kolom 1, en vanaf rij 1
    10.   begin
    11.     if not FileExists(IncludeTrailingBackslash(edt2.Text) + CelTekst + '.pdf') then
    12.     begin
    13.       StringGrid1.Canvas.Font.Color := clRed;
    14.     end
    15.     else
    16.     begin
    17.       StringGrid1.Canvas.Font.Color := clWindowText;
    18.     end;
    19.   end;
    20.   StringGrid1.Canvas.FillRect(Rect);
    21.   StringGrid1.Canvas.TextOut(Rect.Left + grens, Rect.Top + grens, CelTekst);
    22. end;
    It deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoatnt tihng is taht the frist and lsat ltteer are at the rghit pclae.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •