Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Внизменяется шрифт в перерисованой канве Найти похожие ветки
← →
Ded_Matvey © (2005-09-26 09:20) [0]Добрый день.
Имеется код для рисования иконок на TreeView помимо тех что в StateImages:
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var
NodeRect: TRect;
BitMap : TBitMap;
begin
if (Node.Level<>3) then
with Sender.Canvas do begin
NodeRect:=Node.DisplayRect(false);
NodeRect.Left := NodeRect.Left + (Node.Level * (Sender as TTreeView).Indent);
BitMap := TBitMap.Create;
try
BitMap.LoadFromFile(Path+"\0.bmp");
Draw(NodeRect.Left+3, NodeRect.Top, BitMap) ;
finally
BitMap.Free;
end;
end;
end;
так вот... Иконки рисуются нормально... Но! Шрифт меняется на жирный и вообще какой-то другой:)
По ходу выполнения смотрю Canvas.Font - все нормально... Так, а какой мне еще смотреть???
← →
ЮЮ © (2005-09-26 09:44) [1]Может, Sender.Canvas.Font.Assign(Sender.Font) поможет ?
← →
Ded_Matvey © (2005-09-26 10:10) [2]попробовал:
Sender.Canvas.Font.Assign((Sender as TTreeView).Font)
эффект занятный, но совсем не тот что нужно...
← →
TUser © (2005-09-26 10:15) [3]Оффтоп. Загружать битмап из файла для каждой прорисовки, а потом его освобождать - крайне нерационально.
← →
Ded_Matvey © (2005-09-26 10:17) [4]это к делу не относится... этот кусок я уже переписал...
ты вот по делу что сказать можешь?
← →
TUser © (2005-09-26 10:39) [5]Мог бы - сказал бы. В качестве заплатки могу придумать самому писать названия узлов. Примерно так, только надо еще State проверять и рисовать рамку в случае неолбходимости.
var
BitMap: TBitMap;
procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var
NodeRect: TRect;
begin
NodeRect:=Node.DisplayRect(false);
NodeRect.Left := NodeRect.Left + (Node.Level * (Sender as TTreeView).Indent);
Sender.Canvas.Draw(NodeRect.Left+3, NodeRect.Top, BitMap);
Sender.Canvas.TextOut(NodeRect.Left + BitMap.Width + 5, NodeRect.Top + 2, Node.Text);
DefaultDraw:=false;
end;
initialization
BitMap := TBitMap.Create;
BitMap.LoadFromFile("f:\users\evgeniy\cancel.bmp");
finalization
BitMap.Free;
end.
← →
isasa © (2005-09-26 10:49) [6]Выдержка из хелпа D7.
OnCustomDrawItem, DisplayRect, Level, Indent example
The following example shows how the OnCustomDrawItem event handler draws items and lines of the tree view after the OnCustomDraw event handler has filled in the background.
procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
NodeRect: TRect;
begin
with TV.Canvas do
begin
//If DefaultDraw it is true, any of the node"s font properties can be
//changed. Note also that when DefaultDraw = True, Windows draws the
//buttons and ignores our font background colors, using instead the
//TreeView"s Color property.
if cdsSelected in State then
begin
Font.Assign(SelectedFontDialog.Font);
Brush.Color := SelBkgColorDialog.Color;
end;
...
Нужно в процедуре присваивать явно Font и Brush.Color, помогает.
← →
Ded_Matvey © (2005-09-26 10:58) [7]да, получается, что-то очень похожее...
но не рисуются ветки дерева... и выделение узлов страдает...
в общем спасибо, если другого не найду, оставлю это...
только, если вдруг еще будешь писать, забудь о картинках...
они у меня уже из ImageLista грузятся и т.д.
← →
Ded_Matvey © (2005-09-26 11:00) [8]извиняюсь, предыдущее относится к TUser
← →
Ded_Matvey © (2005-09-26 13:28) [9]спасибо isasa...
только мне мозгов не хватает, до конца доделать.
не получается перерисовывать нормально когда State пустой...
Вот примерно...if cdsSelected in State then begin
(Sender as TTreeView).Canvas.Font.Assign(TreeView1.Canvas.Font);
(Sender as TTreeView).Canvas.Brush.Color := clActiveCaption;
end
else begin
(Sender as TTreeView).Canvas.Font.Assign(TreeView1.Canvas.Font);
(Sender as TTreeView).Canvas.Brush.Color := clWindow;
end;
все отрабатывает, но неотмеченые записи все равно другим шрифтом...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c