Форум: "Основная";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
ВнизListView Найти похожие ветки
← →
elserpiente (2008-02-01 23:16) [0]Ребята, как в ListView в ячейке отобразить обычный шрифт с перемешкой с жирным шрифтом
← →
DVM © (2008-02-01 23:43) [1]OwnerDraw
← →
korneley © (2008-02-02 02:29) [2]С ListView, если пользоваться
TCanvas
,TPen
,TFont
, e.t.c., случаются неожиданности. Обычно, при повторном изменении атрибутов рисования. Поэтому, если надо "шрифт с перемешкой с жирным шрифтом", то рекомендую рисовать через API/GDI, благо DC (Canvas.Handle) уже есть. Как рисовать:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=452
← →
KilkennyCat © (2008-02-02 05:49) [3]> [2] korneley © (02.02.08 02:29)
> С ListView, если пользоваться TCanvas, TPen, TFont, e.t.c.,
> случаются неожиданности.
неожиданности случаются у детей.
← →
korneley © (2008-02-02 10:11) [4]
> KilkennyCat © (02.02.08 05:49) [3]
> неожиданности случаются у детей.
Детские - да. Если в хэлпе написано, к примеру, что при сменеCanvas.Font.Style
вListView.OnDrawItems
, должен измениться шрифт, а он, после первой перемены, отказывается меняться, это что, ожидаемое явление? Ну, назовите по другому: "баг", "глюк", "фича" в конце-концов... Суть не изменится. Всё равно несколько строк/символов разными шрифтами (вTListVIew
, если он "репорт") через API выводить придётся. :)
← →
elserpiente (2008-02-02 11:33) [5]2 korneley: есть пример кода в OnDrawItems ???
← →
ketmar © (2008-02-02 12:13) [6]>[4] korneley©(02.02.08 10:11)
это как «отказывается»? код в студию.
← →
DVM © (2008-02-02 13:16) [7]Если использовать именно OwnerDraw то никаких неожиданностей не случается.
← →
elserpiente (2008-02-02 13:30) [8]а почему при Canvas.Font.style := [fsItalic]
Canvas.TextWidth(aText[I]) возращает неверную ширину символа?
← →
ketmar © (2008-02-02 13:33) [9]>[8] elserpiente (02.02.08 13:30)
код?
кстати, не забываем, например, про страшное слово «кернинг». не забыли?
← →
korneley © (2008-02-02 14:31) [10]
> ketmar © (02.02.08 12:13) [6]
> >[4] korneley©(02.02.08 10:11)это как «отказывается»? код
> в студию.
Вот:const
BoldStr : string = "Bold";
NormalStr : string = "Normal";
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var i : integer;
r : TRect;
begin
with Sender.Canvas do begin
r := Item.DisplayRect(drLabel);
r.Left := 0;
for i := 0 to subitem - 1 do
inc(r.Left, TListView(Sender).Columns[i].Width);
r.Right:= r.Left + TListView(Sender).Columns[SubItem].Width;
FillRect(r);
Font.Style := Font.Style + [fsBold];
TextOut( r.Left + 1, r.Top +1, BoldStr);
r.Left := r.Left + TextWidth(BoldStr);
Font.Style := Font.Style - [fsBold];
TextRect(r, r.Left + 1,r.Top +1, NormalStr);
DefaultDraw := false;
end;
end;
Получаем ВСЁ болдом, невзирая на второе болда "откл." (Font.Style := Font.Style - [fsBold]
) СтандартныйListView
,ViewStyle = vsReport
← →
korneley © (2008-02-02 15:01) [11]Или с цветом:
const
BlueStr : string = "Blue";
BlackStr : string = "Black";
procedure TForm1.ListView1CustomDrawSubItemAPI(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var i : integer;
r : TRect;
begin
with Sender.Canvas do begin
r := Item.DisplayRect(drLabel);
r.Left := 0;
for i := 0 to subitem - 1 do
inc(r.Left, TListView(Sender).Columns[i].Width);
r.Right:= r.Left + TListView(Sender).Columns[SubItem].Width;
FillRect(r);
// Font.color := clBlue;
// TextOut( r.Left + 1, r.Top +1, BlueStr);
SetTextColor(Sender.Canvas.Handle, clBlue);
ExtTextOut(Handle, r.Left + 1, r.Top + 1,
0, nil, PChar(BlueStr), length(BlueStr), nil);
r.Left := r.Left + TextWidth(BlueStr);
// Font.color := clBlack;
// TextRect(r, r.Left + 1,r.Top +1, BlackStr);
SetTextColor(Sender.Canvas.Handle, clBlack);
ExtTextOut(Handle, r.Left + 1, r.Top + 1,
0, nil, PChar(BlackStr), length(BlackStr), nil);
DefaultDraw := false;
end;
end;
Так работает, а если разкоментировать Дельфийские строки, а GDI, наоборот, закоментировать - получите полныйclBlue
, т.е. первую перемену и навсегда...
← →
korneley © (2008-02-02 15:15) [12]Да, и вдогонку, в OnDrawItem те же дела. Одним словом: взялись рисовать - рисуйте по-полной!
← →
elserpiente (2008-02-02 15:22) [13]дык, а вопрос был про жирный текст. Как сделать в перемешку?
← →
Жуков Олег (2008-02-02 19:55) [14]Между изменениями свойств канваса вставьте Canvas.Refresh();
← →
{RASkov} © (2008-02-02 20:44) [15]> вставьте Canvas.Refresh();
Да помоему будет достаточно в последний момент обработчика xxxDrawXxx
вставить:with Sender.Canvas do
if Assigned(Font.OnChange) then Font.OnChange(Font);
← →
korneley © (2008-02-02 21:03) [16]Проверил [14] - работает! А я, до этого, шрифты плодил/удалял... :( Но, вообще, это нестандарт. И нигде описание данной нестандартности найти не удалось.
← →
elserpiente (2008-02-04 09:48) [17]Ребята а как изменить высоту строки в режиме vsReport
← →
korneley © (2008-02-05 00:07) [18]
> Ребята а как изменить высоту строки в режиме vsReport
Чё-то с ходу, получилось, что никак... У меня везде, где хотелось высоту строки изменить - TStringGrid.
← →
{RASkov} © (2008-02-05 00:42) [19]> [17] elserpiente (04.02.08 09:48)
Как вариант:
ListView.StateImages.Height
т.е. ЛистВью в StateImages устанавливаем ImageList у которого выставляем Height...
Не совсем может "красиво", но может пойдет...
← →
elserpiente (2008-02-05 10:01) [20]Спасибо, спас VirtualTreeView ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c