Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизПереопределение DrawCell в StringGrid... Запутался совсем... Найти похожие ветки
← →
Cosinus © (2004-09-30 20:11) [0]Мне необходимо изменить тот способ выделения, который присутствует в
CustomGrid
на свой собственный.
То есть, все знают, что
1)На событиеOnClick
происходит выделение контура ячейки цветом текущего шрифта
2)При выделении закрашивается областьRect(XMouseDown,YMouseDown,XMouseNow,YMouseNow)//естественно, что это утрированно
Что мне необходимо изменить...
1)Выделение контура происходит по событию OnMouseDown и по OnMouseUp выделение соответственно снимается
2)Область выделения нескольких ячеек НЕ ПРЯМОУГОЛЬНАЯ, а выполнена, как допустим в любом текстовом редакторе, что то типаRect(XMouseDown,YMouseDown,XMax,YMouseDown,XMax,YMouseNow-1,XMouseNow,YMouseNow-1,XMouseNow,YMouseNow,XMin,YMouseN ow,XMin,YMouseDown+1,XMouseDown,YMouseDown+1)//привел все точки, надеюсь не запутал:)))
Если с первым пунктом я разобрался, то со вторым у меня проблеммы. Я совсем запутался в этом коде(Grids.pas). Натолкните на мысль, где что изменить (наверно я тупой, или может устал просто, но не найду никак, где формируется Rect).
← →
Cosinus © (2004-10-01 15:02) [1]Собственно видимо тупой, потому что и с утра не могу найти :)))
← →
gid © (2004-10-01 15:05) [2]Ну и кто тебе мешает поставить на событие OnClick свой обработчик с темеже параметрами что и в OnClick
← →
TUser © (2004-10-01 15:05) [3]
> 1)Выделение контура происходит по событию OnMouseDown и
> по OnMouseUp выделение соответственно снимается
Это не совсем так. Там сообщения ловятся, а события - это понятие Delphi.
> привел все точки, надеюсь не запутал:)))
Не неайдейся. Лучше на пальцах объясни, как это выглядит в любом текстовом редакторе.
← →
Cosinus © (2004-10-01 15:11) [4]
>>gid ©
С первым пунктом разобрался (хоть я честно говоря и не совсем понял, что вы имели ввиду:)
> TUser © (01.10.04 15:05) [3]
Ок, попробую. Выделяется не прямоугольная область, ас начала выделения и до конца строки, пару(допустим) последующих строк, и от начала строки до конца выделения
Понятнее? Если нет, могу еще раз попробовать :)))
← →
GanibalLector © (2004-10-02 02:14) [5]
procedure TFrame3.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var X2, Y2: integer;
begin
if Button = mbLeft then
with Sender as TStringGrid do begin
MouseToCell(X, Y, X2, Y2);
if (X2 <> LastX) or (Y2 <> LastY) then
Options := Options - [goEditing]
else
begin
Options := Options + [goEditing];
OnMouseDown := nil;
//Perform(WM_LBUTTONDOWN, MK_LBUTTON, Y * 65536 + X);
OnMouseDown := StringGrid1MouseDown;
end;
LastX := X2;
LastY := Y2;
end;
end;
procedure TFrame3.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with stringgrid1.Canvas do begin
if (Acol<>0) and (Arow<>0) then begin
FillRect(Rect);
Font.Color := clblack;
Brush.Color := clwhite;
if textwidth(Stringgrid1.cells[Acol,Arow])>=Rect.Right-Rect.Left then
textout(rect.left+2,Rect.top+4,stringgrid1.Cells[Acol,Arow]) else
textout(rect.left+(rect.right-rect.left -
textwidth(stringgrid1.cells[Acol,Arow])) div 2 ,
Rect.top+4,stringgrid1.Cells[Acol,Arow]);
end else
begin
Brush.Color := clbtnface;
//Font.Style:=[fsBold]; //ïîæèðíåå!
FillRect(Rect);
Font.Color := clblack;
// íó òóò ïðàâäà áåç ïðîâåðêè çà âûõîä ãðàíèöû!!!
// ò.ê. ó ìåíÿ òàì òîëüêî öèôðû! Åñëè êîìó íàäî,òî ñì.ïðèìåð íèæå èëè âûøå!
textout(rect.left+(rect.right-rect.left -textwidth(stringgrid1.cells[Acol,Arow])) div 2 , Rect.top+4,stringgrid1.Cells[Acol,Arow]);
end;
if gdselected in state then begin
Brush.Color := $cbe08b;
FillRect(Rect);
Font.Color := clblack;
if textwidth(Stringgrid1.cells[Acol,Arow])>=Rect.Right-Rect.Left
then textout(rect.left+2 ,Rect.top+4,stringgrid1.Cells[Acol,Arow]) else
textout(rect.left+(rect.right-rect.left -
textwidth(stringgrid1.cells[Acol,Arow])) div 2 ,
Rect.top+4,stringgrid1.Cells[Acol,Arow]);
end;
end;end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c