Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Несколько вопросов по StringGrid


Автор: MotoArhangel 20.4.2011, 22:59
У меня возникло несколько вопросов по работе с компонентом StringGrid:
1. Как можно убрать не очень то красивое явление,пустоту с правой стороны? 
http://www.fotolinker.ru/show-image.php?id=eba9b4421434a097cdf0ee2b6cfea6f2
2. Можно ли присвоить определенной строке  свойство enabled:=false? Если да, то как?
http://www.fotolinker.ru/show-image.php?id=a7e3e02dd0b939b33418bec63feec2d4
3.Можно ли сделать точки как в лист виев? Если да, то как?
http://www.fotolinker.ru/show-image.php?id=4fb6110b868cc2e91f7f1bd9a508b711



Автор: ~FoX~ 21.4.2011, 10:14
1. Например изменить ширину столбца во время ресайза формы:
Код

procedure TForm1.FormResize(Sender: TObject);
begin
  StringGrid1.ColWidths[0] := StringGrid1.Width - 10;
end;


2. Я добавил еще один столбик по которому определяется включена ли ячейка... Если 1, то к ней нельзя будет обратится
Код

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  if (Sender as TStringGrid).Cells[1, ARow] = '1' then begin
    ShowMessage('Ни включенная ячейка!!!');
    CanSelect := false;
  end;
end;

А вот так я подкрасил текст неактивной ячейки
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (Sender as TStringGrid).Cells[1, ARow] = '1' then begin
    (Sender as TStringGrid).Canvas.Font.Color := ClRed;
    (Sender as TStringGrid).Canvas.TextOut(Rect.Left + 2, Rect.Top + 2,
                                  (Sender as TStringGrid).Cells[ACol, ARow]);
  end;  //if


3. Можно, для этого используем DrawText
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  TempRect : TRect;
begin
  TempRect := Rect;
  TempRect.Left := TempRect.Left +2;   //Рект передаваемый процедурой счтиаеться
  TempRect.Top := TempRect.Top +2;    // с отступом от края ячейки
  DrawText((Sender as TStringGrid).Canvas.Handle,
           (Sender as TStringGrid).Cells[ACol, ARow],
           Length((Sender as TStringGrid).Cells[ACol, ARow]),
           TempRect, DT_END_ELLIPSIS);
end;

Но судя по тому что у тебя там пути, тебе можно использовать ключ DT_PATH_ELLIPSIS, он вроде грамотней пути сокращает...

На всякий случай полный код
Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  TempRect: TRect;
begin
  if (Sender as TStringGrid).Cells[1, ARow] = '1' then begin
    (Sender as TStringGrid).Canvas.Font.Color := ClRed;
    (Sender as TStringGrid).Canvas.TextOut(Rect.Left + 2, Rect.Top + 2,
                                  (Sender as TStringGrid).Cells[ACol, ARow]);
  end;  //if
  TempRect := Rect;
  TempRect.Left := TempRect.Left +2;   //Рект передаваемый процедурой счтиаеться
  TempRect.Top := TempRect.Top +2;    // с отступом от края ячейки
  DrawText((Sender as TStringGrid).Canvas.Handle,
           (Sender as TStringGrid).Cells[ACol, ARow],
           Length((Sender as TStringGrid).Cells[ACol, ARow]),
           TempRect, DT_END_ELLIPSIS);
end;


См. аттач...

З.Ы.: ОДИН ТОПИК - ОДИН ВОПРОС!  smile  smile 

Автор: MotoArhangel 21.4.2011, 11:46
Спасибо в следующий раз учту.
Насчет второго вопроса в мыслях что то подобное и было)
По первому вопросу: дело в том что форма не имеет возможности изменять свой размер. Может быть как нибудь жестко привязать размер каждой колонки?

Автор: ~FoX~ 21.4.2011, 17:33
Цитата(MotoArhangel @  21.4.2011,  12:46 Найти цитируемый пост)
 Может быть как нибудь жестко привязать размер каждой колонки?

Ну так посчитай и установи им размеры в дизайн тайме или, что более правильнее, по онШоу формы... Ну и goRowSizing := false;
Или еще проще, ширина последнего столбца := ширине грида ))))

Автор: mardoc 27.4.2011, 07:54
Ах как не хватает события на goRowSizing!.  smile 

Автор: northener 27.4.2011, 11:49
Цитата(~FoX~ @  21.4.2011,  17:33 Найти цитируемый пост)
Ну и goRowSizing := false;


Цитата(mardoc @  27.4.2011,  07:54 Найти цитируемый пост)
Ах как не хватает события на goRowSizing!.


Хм. А причем тут goRowSizing?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)