Главная страница
    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.036 c
14-1096045730
VictorT
2004-09-24 21:08
2004.10.17
Вот такой вот спам пришёл...


8-1090399109
Anna
2004-07-21 12:38
2004.10.17
Здравствуйте! Подскажите, пожалуйста, как программно нескольких m


14-1096447111
PVOzerski
2004-09-29 12:38
2004.10.17
А где бы найти ssh-клиента для Win32?


6-1092032506
fylhtq
2004-08-09 10:21
2004.10.17
А кавк програмно подключить сетевой ресурс?


4-1094849129
Destroyer
2004-09-11 00:45
2004.10.17
Как найти адрес нужный памяти в чужом приложении?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский