Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Переопределение 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]; //&#239;&#238;&#230;&#232;&#240;&#237;&#229;&#229;!
FillRect(Rect);
Font.Color := clblack;
// &#237;&#243; &#242;&#243;&#242; &#239;&#240;&#224;&#226;&#228;&#224; &#225;&#229;&#231; &#239;&#240;&#238;&#226;&#229;&#240;&#234;&#232; &#231;&#224; &#226;&#251;&#245;&#238;&#228; &#227;&#240;&#224;&#237;&#232;&#246;&#251;!!!
// &#242;.&#234;. &#243; &#236;&#229;&#237;&#255; &#242;&#224;&#236; &#242;&#238;&#235;&#252;&#234;&#238; &#246;&#232;&#244;&#240;&#251;! &#197;&#241;&#235;&#232; &#234;&#238;&#236;&#243; &#237;&#224;&#228;&#238;,&#242;&#238; &#241;&#236;.&#239;&#240;&#232;&#236;&#229;&#240; &#237;&#232;&#230;&#229; &#232;&#235;&#232; &#226;&#251;&#248;&#229;!
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
9-1087207512
Маг Гыр
2004-06-14 14:05
2004.10.17
Вопрос по поводу квестов


1-1096652804
UserUserov
2004-10-01 21:46
2004.10.17
Поиск файлов


1-1096538530
Сергей__С
2004-09-30 14:02
2004.10.17
Scroll Lock


14-1096101166
Lenor
2004-09-25 12:32
2004.10.17
как узнать, кем...


14-1096053955
Рулон Обоев
2004-09-24 23:25
2004.10.17
зарядка для мобильников