|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
StringGrid's и OnDrawCell
Всем привет! Не знал, где создать тему, создал в данной ветке.
Вопрос в следующем: на форме есть 2 StringGrid-а у которых одинаковая процедура OnDrawCell, различия только в названиях таблиц. Что-то мне подсказывает , что можно одну процедуру прикрутить к двум таблицам, чтобы не "плодить" лишнего кода. Вот код самой процедуры: Код:
procedure TForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Format: Word; C : array[0..255] of Char; temp, max, i, j : integer; begin Format := DT_Center OR DT_WORDBREAK; (Sender as TStringGrid).Canvas.FillRect(Rect); StrPCopy(C, (Sender as TStringGrid).Cells[ACol, ARow]); WinProcs.DrawText((Sender as TStringGrid).Canvas.Handle, C, StrLen(C), Rect, Format); for I := 0 to StringGrid1.ColCount - 1 do begin max:= 0; for J := 0 to StringGrid1.RowCount - 1 do begin temp := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[i, j]); if temp > max then max:=temp; end; StringGrid1.ColWidths[i] := max + StringGrid1.GridLineWidth + 10; end; end; Код:
..... private procedure TForm.GridsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); ...... procedure TForm.GridsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Format: Word; C : array[0..255] of Char; temp, max, i, j : integer; begin Format := DT_Center OR DT_WORDBREAK; (Sender as TStringGrid).Canvas.FillRect(Rect); StrPCopy(C, (Sender as TStringGrid).Cells[ACol, ARow]); WinProcs.DrawText((Sender as TStringGrid).Canvas.Handle, C, StrLen(C), Rect, Format); with Sender as TStringGrid do for I := 0 to StringGrid.ColCount - 1 do begin max:= 0; for J := 0 to StringGrid.RowCount - 1 do begin temp := StringGrid.Canvas.TextWidth(StringGrid.Cells[i, j]); if temp > max then max:=temp; end; StringGrid.ColWidths[i] := max + StringGrid.GridLineWidth + 10; end; end; Помогите пожалуйста, оптимизировать код для личного так сказать роста. Спасибо. |
#2
|
|||
|
|||
Ну если пишешь StringGrid.ColCount и.т.п, то гдето выше надо написать
Код:
Var StringGrid : TStringGrid; ... begin if not (Sender is TStringGrid) then Exit; StringGrid := Sender as TStringGrid; и далее во всей процедуре заменить (Sender as TStringGrid) на StringGrid; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
bambooshoot (11.12.2012)
|
#3
|
|||
|
|||
Спасибо дружище!
Сделал так: Код:
unit Unit1; interface uses ..... WinProcs, .....; ...... private procedure GridsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure TForm1.GridsDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var StringGrid : TStringGrid; Format: Word; C : array[0..255] of Char; temp, max, i, j : integer; begin if not (Sender is TStringGrid) then Exit; StringGrid := Sender as TStringGrid; Format := DT_Center OR DT_WORDBREAK; (StringGrid).Canvas.FillRect(Rect); StrPCopy(C, (StringGrid).Cells[ACol, ARow]); WinProcs.DrawText((StringGrid).Canvas.Handle, C, StrLen(C), Rect, Format); for I := 0 to StringGrid.ColCount - 1 do begin max:= 0; for J := 0 to StringGrid.RowCount - 1 do begin temp := StringGrid.Canvas.TextWidth(StringGrid.Cells[i, j]); if temp > max then max:=temp; end; StringGrid.ColWidths[i] := max + StringGrid.GridLineWidth + 10; end; end; procedure TForm1.FormCreate(Sender: TObject); StringGrid1.OnDrawCell:= GridsDrawCell; StringGrid2.OnDrawCell:= GridsDrawCell; .............. |
#4
|
|||
|
|||
какойто у меня прикол с OnDrawGrid в Delphi XE
на 7ке все норм работало не мойму в чем дело закрашивает с отступом вправо на пару пикселей... текст стандартный procedure TfmMain.StringGrid4DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (ARow>0) and (not (gdSelected in State)) then begin with StringGrid4 do begin Canvas.Brush.Color:=cllime; Canvas.FillRect(Rect); end; end; end; |