Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 16:30   #1
Sicher
 
Регистрация: 02.02.2010
Сообщений: 3
Печаль Плавная перерисовка компанентов на форме, StringGrid

Всем привет!!! Столкнулся с такой проблемой.
Имеется stringgrid на форме, у него установленно значение align, так как уго надо двигать по форме и изменять значения ширины, также в событии DrawCell прописана процедура подгонки ширины и высоты ячейки.
код ниже. так вот, очень неприятно выглядит перерисовка при изменении размера этого компанента, и хотелось бы от этого как нибудь избавиться. подскажите хотя бы направление в котором надо копать, буду признателен)))
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow:
  Integer;
  Rect: TRect; State: TGridDrawState);
var
  Format: Word;
  C: array[0..255] of Char;
  x, y, w,h,r: integer;
  s: string;
  MaxWidth,MaxHeight: integer;
begin
    with StringGrid1 do
    begin
      {for x := 0 to ColCount - 1 do
      begin }
        MaxWidth := 0;
        for y :=0  to RowCount - 1 do
        begin
         w := Canvas.TextWidth(Cells[1,y]);
         if w > MaxWidth then
            MaxWidth := w;
        //RowHeights[y]:= Canvas.TextHeight(Cells[1,y])*2+5;
        end;
        StringGrid1.ColWidths[1] := MaxWidth + 5;

        for y :=0  to RowCount - 1 do
        begin
          C := '';
  Format := DT_LEFT or DT_WORDBREAK;
  (Sender as TStringGrid).Canvas.FillRect(Rect);
  StrPCopy(C, (Sender as TStringGrid).Cells[ACol, ARow]);
  if c <> '' then //если есть значения
  begin
    r := WinProcs.DrawText((Sender as TStringGrid).Canvas.Handle, C,
      StrLen(C), Rect, Format);

    if r >= (Sender as TStringGrid).RowHeights[Arow] then
      //если высота колонки меньше
      (Sender as TStringGrid).RowHeights[Arow] := r;
      {else
      (Sender as TStringGrid).RowHeights[Arow] := r; }

  end;
        if StringGrid1.ColWidths[1]<> w then
        begin
          StringGrid1.ColWidths[0]:=StringGrid1.ClientWidth-StringGrid1.ColWidths[1]-3;
          w:=StringGrid1.ColWidths[1];
        end;
    end;

    end;
    r:=0;
    with StringGrid1 do
    begin
    for x:= 0 to RowCount-1 do
    r:=r+RowHeights[x];
    end;
    StringGrid1.ClientHeight := r+StringGrid1.RowCount+1;
end;
Sicher вне форума Ответить с цитированием
Старый 08.02.2012, 16:34   #2
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
По умолчанию

я так понял оно мерехтит?
если да то
Код:
TControl(StringGrid1).parent.doubleBuffered:=true;
maxsept вне форума Ответить с цитированием
Старый 08.02.2012, 17:01   #3
Sicher
 
Регистрация: 02.02.2010
Сообщений: 3
По умолчанию

а втыкать в какое место эту строку? и как она работает? я щас оооочень туго соображаю((((
Sicher вне форума Ответить с цитированием
Старый 08.02.2012, 17:19   #4
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
По умолчанию

один раз ,можна в FormCreate
maxsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перерисовка StringGrid Китос Общие вопросы C/C++ 0 21.01.2012 22:35
В типизированном файле целых чисел определить сумму компанентов на четных местах. (паскаль) Rfn.if Помощь студентам 0 27.04.2011 15:36
Плавная смена картинок dedyshka JavaScript, Ajax 1 21.03.2010 13:38
прозрачное появление нескольких компанентов? ram12 Общие вопросы Delphi 2 14.02.2010 16:08
StringGrid на другой форме cowboy Общие вопросы Delphi 20 17.07.2009 14:07