Page 1 of 2 1 2 LastLast
Results 1 to 15 of 17

Thread: Klikbaar grid met kleuren

  1. #1
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415

    Klikbaar grid met kleuren

    Voor een applicatie moet ik een soort matrix/grid hebben van 7 kolommen en 5 rijen. In elk cell moet een string komen en de achtergrond moet een kleur hebben. Als de gebruiker dan op een cell klikt moet deze selecteert worden en de string en de kleur uitgelezen.

    Ik dacht zelf dit te doen met een StringGrid, maar was benieuwd of iemand een beter of makelijker idee had?
    Anders

    May your code compile!

  2. #2
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    StringGrid lijkt me prima te voldoen.
    De Objects-property kun je gebruiken om te linken met de kleur-informatie, of evt. misbruiken om de kleur rechtstreeks in op te slaan.
    De achtergrondkleur teken je in OnDrawCell, daarin kun je ook de selectie naar wens tekenen.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  3. #3
    Waarom dan niet een TDrawgrid nemen?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  4. #4
    Omdat in elke cel een string moet komen? Wel zo handig met een stringgrid.
    1+1=b

  5. #5
    Dat kan je makkelijk tekenen, de cel moet toch al gekleurd worden. Dus TDrawgrid lijkt me logischer. De tekst kan je altijd ergens anders bijhouden
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  6. #6
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Het inkleuren van de Cell hoeft volgens mij niet eens in OnDrawCell. Canvas.Brush.Color instellen doet het denk ik ook al met DefaultDrawing op True.

    Enfin, TDrawGrid heeft natuurlijk geen opslagcapaciteit, dus ik vind TStringGrid ook logischer.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  7. #7
    Code:
      StringGrid1.Canvas.Brush.Color := clRed;
    doet niets meer dan een stringgrid tonen met grijze fixedcells en witte cellen, geen rode cellen.
    Als je wil inkleuren moet je DefaultDrawing uitzetten een een OnDrawCell event hebben.
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  8. #8
    Maar waarom de strings ergens anders opslaan en een drawgrid kiezen? Dat heeft toch geen zin? Stringgrid heeft die opslag al in zich. Dus zelfs als je wel zelf de tekst moet tekenen is een stringgrid nog handiger.
    Het is helaas wel lastig dat je niet wat handiger de kleuren kunt bepalen. Je ontkomt er inderdaad niet aan om de hele cel opnieuw te tekenen.
    1+1=b

  9. #9
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133
    Henkie, ik bedoelde dat ook in een OnDrawCell event, maar inderdaad, daarmee gebeurt er niets...
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  10. #10
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415
    Ik heb nu een stringgrid en di vul ik met wat onzin tekst m.b.v. deze code
    Code:
    procedure TfrmRisiciGraaf.InitGrid;
    var
      y, x: Integer;
    begin
      sgRisicoGraaf.ColCount := 8;
      sgRisicoGraaf.RowCount := 6;
      for x := 0 to sgRisicoGraaf.ColCount - 1 do
      begin
        sgRisicoGraaf.Cells[0, x] := 'TekstX ' + IntToStr(x);
        for y := 0 to sgRisicoGraaf.RowCount - 1 do
        begin
          sgRisicoGraaf.Cells[x, y] := 'TekstXY ' + IntToStr(x) + ' ' + IntToStr(y);
        end;
      end;
    end;
    Dat gaat prima. Maar zodra ik in de onDrawCell iets wil kleuren gaat het mis - Zie onderste deel van afbelding. Hier is de OnDrawCell code
    Code:
    procedure TfrmRisiciGraaf.sgRisicoGraafDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
      if ARow = 0 then
        sgRisicoGraaf.Canvas.Brush.Color := clRed;
      if ACol = 0 then
        sgRisicoGraaf.Canvas.Brush.Color := clBlue;
    
      sgRisicoGraaf.Canvas.TextRect(Rect, Rect.Left, Rect.Right,sgRisicoGraaf.Cells[ACol, ARow]);
    end;
    Ik zie even niet wat ik fout doet. Iemand een idee?
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	stringgrid.png 
Views:	143 
Size:	14.8 KB 
ID:	4387  
    Anders

    May your code compile!

  11. #11
    Na de kleur moet je ook de tekst tekenen.
    Als 3de parameter moet je Rect.Top gebruiken en niet Rect.Right
    Last edited by Henkie; 27-Jan-09 at 22:34.
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  12. #12
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415
    Thanks Henkie - dat was het
    Anders

    May your code compile!

  13. #13
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Quote Originally Posted by GolezTrol View Post
    Maar waarom de strings ergens anders opslaan en een drawgrid kiezen? Dat heeft toch geen zin? Stringgrid heeft die opslag al in zich. Dus zelfs als je wel zelf de tekst moet tekenen is een stringgrid nog handiger.
    Het is helaas wel lastig dat je niet wat handiger de kleuren kunt bepalen. Je ontkomt er inderdaad niet aan om de hele cel opnieuw te tekenen.
    Natuurlijk heeft dat wel zin: separation of concerns, namelijk.
    Volgens mijn bescheiden mening is het de taak van een control om informatie te tonen, niet om die informatie op te slaan.
    Trouwens: je opmerking over de kleuren wijst ook al in die richting.
    Mijn oplossing: DrawGrid gebruiken om een (generische) lijst of matrix van objecten te tonen.
    All methodologies are based on fear. -- Kent Beck.

  14. #14
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415
    Mijn stringgrid met kleuren is werkt nu naar wens, maar ik wil ook graag de kleur van een cell kunnen terug lezen. Bijvoorbeeld in de onSelectCell. Daar heb ik dus de column en row en zou ik dit willen doen:
    Code:
    sgRisicoGraaf.Cells[ACol, ARow].Color
    Maar dat werkt dus niet.

    Is er een ander methode hiervoor?
    Anders

    May your code compile!

  15. #15
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Een array van shape's is misschien en oplossing.
    Dat ligt aan de hoeveelheid velden, of het werkbaar blijft.
    10.4.2, Delphi2010, of Lazarus 2.2.0

Page 1 of 2 1 2 LastLast

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
  •