Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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]; //&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.054 c
1-1096363145
msguns
2004-09-28 13:19
2004.10.17
Сообщение от одной форме другой


1-1096975263
antonn
2004-10-05 15:21
2004.10.17
Drag&amp;Drop


14-1096304163
Capone
2004-09-27 20:56
2004.10.17
delphi 1


4-1094719924
MooSE
2004-09-09 12:52
2004.10.17
Как заставить exe-файл удалять самого себя?


8-1090855559
asat
2004-07-26 19:25
2004.10.17
Graphics32





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский