Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];

Вниз

Пример OnDrawCell   Найти похожие ветки 

 
Trible   (2007-09-28 14:34) [0]

Hello,
Дайте пример для OnDrawCell для KOLmdvXLGrid, пожалуйста.

Вообще мне нужно в каждой ячейке отрисовать PBitmap, и правее него вывести оригинальный текст ячейки. Хелп мии ;)


 
mdw ©   (2007-09-28 16:50) [1]

????????
procedure TMainForm.XLGridDrawCell(Sender: PControl; ACol, ARow: Integer;
 ACell: PmdvXLCell; ACanvas: PCanvas; ARect: TRect; ASelected,
 AFocused: Boolean; var Access: Boolean);
begin
   Access:= True;
//как-то получаем битмап Bmp: PBitmap
......

   Bmp.StretchDraw(

   if Access then begin
     if not AFocused then begin
       ACanvas.Brush.Color:= clYellow;
       ACanvas.Brush.BrushStyle:= bsSolid;
       ACanvas.FillRect(ARect);
       ACanvas.Pen.Color:= clRed;
       ACanvas.Pen.PenWidth:= 1;
       ACanvas.Pen.PenMode:= pmCopy;
       ACanvas.Brush.BrushStyle:= bsClear;
       ACanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
       ACanvas.Font.Color:= clNavy;
     end;
     ACanvas.DrawText("C="+Int2Str(ACol)+"  R="+Int2Str(ARow), ARect, DT_WORDBREAK or DT_CENTER);
   end;
end;


 
mdw ©   (2007-09-28 16:55) [2]

????????
procedure TMainForm.XLGridDrawCell(Sender: PControl; ACol, ARow: Integer;
 ACell: PmdvXLCell; ACanvas: PCanvas; ARect: TRect; ASelected,
 AFocused: Boolean; var Access: Boolean);
begin
   Access:= True;
//как-то получаем битмап Bmp: PBitmap
......

   Bmp.Draw(ACanvas.Handle, ARect.Left+2, ARect.Top + (ARect.Bottom-ARect.Top - Bmp.Height) div 2);
   ARect.Left:= ARect.Left + 4 + Bmp.Width;
   ACanvas.DrawText("Ваш текст", ARect, DT_SINGLELINE or DT_LEFT or DT_VCENTER);

end;


 
mdw ©   (2007-09-28 16:56) [3]

первый пост как-то случайно добавился. Смотреть второй.


 
finder2007 ©   (2007-10-23 02:37) [4]

Не получается своя отрисовка в TreeListEdit. Вот код из тестовой программки:
function TForm1.mTreeTLEDrawCell(Sender: PControl; DC: HDC; Rect: TRect; AItem: THandle; ACol: Integer; ItemState: TDrawState): Boolean;
var BMP:pBitmap;
begin
BMP:=NewBitMap(0,0);
BMP.LoadFromResourceName( hInstance,"MY_BMP_RES");
 if ACol=0 then
  begin
   Bmp.Draw(mTree.Canvas.Handle, Rect.Left+2, Rect.Top + (Rect.Bottom-Rect.Top - Bmp.Height) div 2);
   Rect.Left:= Rect.Left + 4 + Bmp.Width;
  end;
mTree.Canvas.DrawText(mTree.Cells[AItem,ACol], Rect, DT_SINGLELINE or DT_LEFT or DT_VCENTER);
BMP.Free;
result:=true;
end;                      

Пиктограммы и текст отрисовываются нормально, но узлы выделяются только если щелкать мышкой на пиктограмме, а не на тексте. Правая кнопка реагирует нормально при включенном TVRightClickSelect.
И еще - когда встроил примерно такой код в работающий проект - пошла двойная отрисовка - стандартная и своя одновременно. Свойства TreeListEdit те же, думал влияет TLECellAdjust - удалил, все по прежнему. Подскажите, где копать?
Делал в Lazarus, на Delphi не пробовал.


 
mdw ©   (2007-10-23 12:13) [5]


> Не получается своя отрисовка в TreeListEdit. Вот код из
> тестовой программки:

А что не получается? конкретно?

> Пиктограммы и текст отрисовываются нормально, но узлы выделяются
> только если щелкать мышкой на пиктограмме, а не на тексте.
>  Правая кнопка реагирует нормально при включенном TVRightClickSelect.

А что подразумевается под выделением узла? и что такое пиктограмма, ваш битмап, который рисуете?

> И еще - когда встроил примерно такой код в работающий проект
> - пошла двойная отрисовка - стандартная и своя одновременно.

С чего вы сделали такой вывод?


 
finder2007   (2007-10-23 14:29) [6]

Под выделением узла я подразумевал переход в активное состояние (TVSelected). А проверял по OnSelChange. Нажимаю левой кнопкой на пиктограмму - переходит, на текст - нет. Причем при включенном TVRightClickSelect правая кнопка отрабатывает нормально - и на пиктограмме и на тексте. Фон на выделенном узле меняется только под пиктограммой, фон текста какой был, такой и остается. Под пиктограммой я имел ввиду этот же битмап. Это все по тестовому примеру, который выше привел. Здесь текст отрисовывается только один раз, только с выделением проблема.
Вторая проблема - когда этот код вставил в рабочий проект, появилась двойная отрисовка текста - с отступом, как и должно быть, и без отступа. Текст, который без отступа, виден как под пиктограммой, так и в промежутке между пиктограммой и нормальным текстом. Поэтому такое мнение, что текст отрисовывается сначала стандартно, а потом в DrawCell. Причем выделяется фоном стандартный текст. Здесь уже пиктограмму рисовал и битмапами, и ImageList.Draw, убирал TLECellAdjust - думал, вдруг из-за нее стандартная отрисовка сработывает, хотя там только цветом оперирую. ImageList с привязкой к TLE тоже убирал. C входящим параметром DC оперировал, канву создавал. Параметры все те же, что и в тестовом примере. Ничего не помогает. Не понимаю, где туплю.


 
mdw ©   (2007-10-23 14:52) [7]


>  А проверял по OnSelChange.

Есть OnTVSelChanging

> Фон на выделенном узле меняется только под пиктограммой,
>  фон текста какой был, такой и остается.

Ну так закрасьте нужным цветом. Вы же  берете на себя функцию отрисовки ячейки, вот и рисуйте в зависимости от состояния (ItemState).

> Вторая проблема - когда этот код вставил в рабочий проект,
>  появилась двойная отрисовка текста - с отступом....

Ну, не знаю, пришлите мин. проект, где не работает, так сложно сказать.


 
finder2007   (2007-10-23 15:16) [8]

OnTVSelChanging - аналогично. Срабатывает только на пиктограмме либо по правой кнопке.
function TForm1.mTreeTVSelChanging(Sender: PControl; oldItem, newItem: THandle ): Boolean;
begin
msgok(mTree.Cells[newitem,0]);
result:=true;
end;              


 
mdw ©   (2007-10-23 16:28) [9]

Короче, уменя все работает.:)))
Присылайте проект и укажите что и где не работает, а то какой-то дурной разговор получается.


 
mdw ©   (2007-10-23 18:35) [10]

Отвечу здесь на письмо.
1. Отрисовка. Битмап лучше один раз создать, а не при отрисовке каждой ячейки, но хозяин барин.

function TForm1.mTreeTLEDrawCell(Sender: PControl; DC: HDC; Rect: TRect;
 AItem: THandle; ACol: Integer; ItemState: TDrawState): Boolean;
begin
BMP:=NewBitMap(0,0);
BMP.LoadFromResourceName( hInstance,"MY_BMP_RES");

if (odsSelected in ItemState)and(mTree.CurCol = ACol) then  mTree.Canvas.Brush.Color:= clHighlight
else mTree.Canvas.Brush.Color:= clWindow;
mTree.Canvas.FillRect(Rect);

Bmp.Draw(mTree.Canvas.Handle, Rect.Left+2, Rect.Top + (Rect.Bottom-Rect.Top - Bmp.Height) div 2);

Rect.Left:= Rect.Left + 4 + Bmp.Width;
mTree.Canvas.DrawText(mTree.Cells[AItem,ACol], Rect, DT_SINGLELINE or DT_LEFT or DT_VCENTER);

BMP.Free;
result:=true;
end;

2. По поводу выделения\невыделения проверьте не включен ли SIMPLE_TREEVIEW?



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1217335816
Mops
2008-07-29 16:50
2008.09.07
1251 в UTF


2-1217326915
wsv
2008-07-29 14:21
2008.09.07
ADOConnection и его ConnectionTimeout


15-1215876908
Denis__
2008-07-12 19:35
2008.09.07
Всё ли нужно...


1-1198217550
андр
2007-12-21 09:12
2008.09.07
DataSet to DLL


2-1217323341
Cobalt
2008-07-29 13:22
2008.09.07
AV при работе с TStringList





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