Avatar billede morten_s Nybegynder
27. januar 2003 - 15:38 Der er 5 kommentarer og
1 løsning

dbGrid.TitelClick ingen Sender?

Jeg har brug for at lave lidt generel programmering til OnTitelClick eventet i et dbGrid, men opdager at parameteren sender ikke overføres, nogen som har en ide til hvordan dette omgåes?

min kode skulle have set sådan her ud:

procedure TFrameLogs.dbgTitleClick(Column: TColumn);
var
  dbg: TDBGrid;
begin
  if Sender is TDBGrid then
  begin
    dbg:= Sender as TDBGrid;
    dbg.Columns[Column.Index].Title.Font.Color:= Black;
    if
      bla...bla...bla

  end;
end;
Avatar billede stoney Nybegynder
27. januar 2003 - 15:58 #1
Det er ikke kønt mend et virker

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
case column.Index of
0 : showmessage('Du har klikket på første kolonne');
1 : showmessage('Du har klikket på anden kolonne');
end;
end;

Stoney
Avatar billede stoney Nybegynder
27. januar 2003 - 16:01 #2
eller

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if column.Title.Caption = 'Beskrivelse' then
showmessage('du har klikket på' + column.Title.Caption);

end;


Den er case-sensitiv

Stoney
Avatar billede morten_s Nybegynder
27. januar 2003 - 16:08 #3
Ja det er nu ikke lige det jeg mener Stoney, jeg skal bruge OnTitelClickEventet generelt til flere forskellige Grids sådan her

procedure TFrameLogs.dbgTitleClick(Column: TColumn);
var
  dbg: TDBGrid;
begin
  if Sender is TDBGrid then
  begin
    dbg:= Sender as TDBGrid;
    if dbg = dbGrid1 then
      bla...bla...bla
    if dbg = dbGrid2 then
      bla...bla...bla
osv.

  end;
end;
Avatar billede doctorseb Nybegynder
27. januar 2003 - 22:19 #4
Det lyder som en designfejl du er ved at rode dig ud i..? Er det ikke oplagt at subclasse grid-dimsen i stedet?
Avatar billede stoney Nybegynder
27. januar 2003 - 22:50 #5
public
  procedure mortens_dbgrid_title_click(Sender : TObject);
    { Public declarations }
  end;

var
  Form1: TForm1;
  gridcomp : Tcomponent;
  gridname : string;

implementation

{$R *.dfm}
procedure tform1.mortens_dbgrid_title_click;

begin
if gridname = 'DBGrid1' then
showmessage('dbgrid1');
if gridname = 'DBGrid2' then
showmessage('dbgrid2');
// husk den er case-sensitiv
end;

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
mortens_dbgrid_title_click(gridcomp);
end;

procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
gridname := (TComponent(sender).Name);
end;


Sæt alle dine grids onenter event lig med "dbgrid1" i dette tilfælde
og alle dbgrid_title_click til dbgrid1titleclick.

Det er ikke kønt, men fanger dog dit gridnavn.

Stoney
Avatar billede morten_s Nybegynder
06. marts 2004 - 14:34 #6
a
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