Avatar billede jesnymark Nybegynder
09. august 2004 - 12:05 Der er 5 kommentarer og
2 løsninger

Vælg en kolonne i en stringgrid.

Hej

Et lille problem :

Hvordan kan man vælge en kolonne i en stringgrid, det er jo muligt at vælg en række (goRowSelect).
Det skal være sådan at når man trykker på musen skal den sætte fokus på en kolonne istedetfor en række.

PS. Bruger D7 Personal.


mvh
Jesper
Avatar billede hrc Mester
09. august 2004 - 15:49 #1
Er ikke helt sikker på at vi snakker om en TStringGrid. Det eneste jeg kan finde om RowSelect er vedr. TListViews. Kan du prøve at uddybe?
Avatar billede jesnymark Nybegynder
09. august 2004 - 15:55 #2
Hej hrc

I en TSringGrid kan man sætte goRowSelect under options i denne komponent, det bevirker at hele linjen hvor man står bliver sat til en farve og når man bevæger sig op/ned så ændre den sig.

mvh
Jesper
Avatar billede jesnymark Nybegynder
09. august 2004 - 15:56 #3
UPS, lige en kommentar mere!!

Den skal virke på samme måde MEN bare til højre/venstre istedet.

mvh
Jesper
Avatar billede hrc Mester
10. august 2004 - 08:19 #4
Jeg kan ikke komme på andet end at sætte DefaultDraw til false og så tegne det selv - noget i retning af dette:

unit FMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TfrmMain = class(TForm)
    sgGrid: TStringGrid;
    procedure sgGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    procedure sgGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    fSelectedCol : integer;
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.sgGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;
                                  State: TGridDrawState);
begin
  with (Sender as TStringGrid) do begin
    if (FixedCols > aCol) or (FixedRows > aRow) then begin
      Canvas.Brush.Color := clBtnFace;
      Canvas.FillRect(Rect);
    end
    else if ACol = fSelectedCol then begin
      Canvas.Brush.Color := clBlue;
      Canvas.FillRect(Rect);
    end
    else begin
      Canvas.Brush.Color := clWindow;
      Canvas.FillRect(Rect);
    end;
  end;
end;

procedure TfrmMain.sgGridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
  fSelectedCol := aCol;
  (Sender as TStringGrid).Refresh; // Ellers tegner den ikke alle kolonner op.
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  fSelectedCol := sgGrid.FixedCols; // Gem kolonne så OnCellDraw ved hvor den skal markere
end;

end.
Avatar billede hrc Mester
10. august 2004 - 08:20 #5
Så skal du naturligvis også tegne/skrive i felterne selv - noget mere bøvl, men det er det eneste jeg kan komme på.
Avatar billede stoney Nybegynder
10. august 2004 - 08:55 #6
hrc >>  Guns N' Roses DO rocks :-)

anyway,

procedure TForm1.Button1Click(Sender: TObject);
var
  t: TGridRect;
begin

  t.left:=1;
  t.right:=1;
  t.top:=stringgrid1.fixedrows;
  t.bottom:=stringgrid1.RowCount;
  stringgrid1.selection:=t;
end;

Stoney
Avatar billede hrc Mester
10. august 2004 - 11:30 #7
stoney - Jeg så godtnok TGridRect men troede at det var pixel-koordinaterne eller lignende. Det ser jo ud til at løse opgaven.

P.s. "rocks" skulle være "sucks", ikke? En typisk tastefejl :-) Vi har det røde og blå album (illusion I & II), men den fænger altså ikke hos mig. Håber det tæller op at jeg synes Delphi er et fedt programmeringssprog.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester