![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
рисовать в ondrawcell
bag © (2009-07-21 12:40:00)можно ли так рисовать на на гриде? моргает переодически :( что сильно раздражает, может есть другие варианты?
в ondrawcell
Canvas.Pen.Color := clblack;
Canvas.Pen.Width := 3;
Canvas.MoveTo((ColCount - 30) * DefaultColWidth + ColCount - 31, 0);
Canvas.LineTo((ColCount - 30) * DefaultColWidth + ColCount - 31, Height);
KilkennyCat (2009-07-21 20:43:00) [1]
> можете привести код?
еще раз? Легко.
TCanvas.DrawFocusRect(const rect : TRect);
поскольку рисование выполняется используя Xor, второй вызов уничтожает первый.
bag (2009-07-21 19:04:00) [2]KilkennyCat,я не понял, можете привести код?
KilkennyCat (2009-07-21 17:18:00) [3]от пуктирной рамки можно избавиться выполнив еще раз drawFocusRect
Amoeba (2009-07-21 17:12:00) [4]Зато от пунктирной рамки избавишься.
bag (2009-07-21 15:53:00) [5]при DefaultDrawing в False все остальные ячейки придется самому рисовать, хотя это не долго делается, но все же:)
Amoeba (2009-07-21 15:29:00) [6]DefaultDrawing в False установлено?
bag (2009-07-21 14:34:00) [7]нашел ответ на свой вопрос
if (gdSelected in State) then
begin
Canvas.Brush.Color := clWhite;
Canvas.Font.Color := clBlack;
end;
но от пунктирной рамки избавиться все равно не удается
bag (2009-07-21 14:22:00) [8]Рисую следующим кодом линии в ячейках, все бы хорошо, но если выделить ячейку, а потом перейти к другому компоненту(скажем щелкнуть по кнопке), то в ячейке которую мы выделяли теряется текст(если снова щелкнуть по ней то текст в ней появляется)! Почему? как исправить? еще раздражает пунктирная рамка вокруг ячейки, может кто знает путь избавления от рамки?
procedure TfrmMain.SG6DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
s: string;
s_l: integer;
begin
with SG6 do
begin
S := Cells[ACol, ARow];
s_l := length(s);
Canvas.Pen.Color := clblack;
Canvas.Pen.Width := 1;
Canvas.Brush.Color := clWhite;
if (ACol >= 0)
and (ARow = 0) then
begin
Canvas.FillRect(Rect);
Canvas.MoveTo(Rect.Right, rect.Top);
Canvas.LineTo(Rect.Right, Rect.Bottom + 1);
if s_l = 1 then
Canvas.TextOut(rect.left + (ColWidths[acol] div 2) - 3, rect.top + 3, S)
else
Canvas.TextOut(rect.left + (ColWidths[acol] div 2) - 6, rect.top + 3, S)
end;
end;
end;
bag (2009-07-21 13:24:00) [9]спасибо, решение было на поверхности!
KilkennyCat (2009-07-21 13:08:00) [10]
> Rect := CellRect(ACol, ARow);
зачем это? ты на событие ondrawcell внимательно смотрел?
KilkennyCat (2009-07-21 13:07:00) [11]мовету, лайнту... какая разница между выводом техта и рисованием линии?
bag (2009-07-21 13:04:00) [12]так закрашиваю ячейки:
with SG6_1 do
begin
Canvas.Brush.Color := $00ffdbbf;
Rect := CellRect(ACol, ARow);
S := Cells[ACol, ARow];
if (ACol >= ColCount - 2) and (ARow >= 0) and (ARow <= RowCount) then
begin
Canvas.FillRect(Rect);
Canvas.TextOut(rect.left + 3, rect.top + 2, S);
end;
end;
как с линиями в упор не понимаю, прошу помощи!
KilkennyCat (2009-07-21 13:00:00) [13]линии рисуются точно также. и закрашивается все нормально. просто внимательнее с координатами.
bag (2009-07-21 12:53:00) [14]закрасить всю ячейку научился, а как нарисовать там линию не пойму :(
и вот еще вопрос такой, если я нарисую на ячейке и все в данном столбце то промежутки между ячейками не закрасятся и будет линия одна пунктирная?
KilkennyCat (2009-07-21 12:44:00) [15]можно, но нельзя.
перерисовывать нужно только ту ячейку, которая вызвала событие. а не по всему гриду. Ибо тогда, каждая ячейка начнет перерисовывать весь грид, а не только себя.
bag (2009-07-21 12:42:00) [16]линии то рисуются, а данные в таблицы появляются не сразу а как бы загружаются и пользователь это видит :(