![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListView [D7, WinXP]
elserpiente © (2008-02-01 23:16:00)Ребята, как в ListView в ячейке отобразить обычный шрифт с перемешкой с жирным шрифтом
elserpiente (2008-02-05 10:01:00) [1]Спасибо, спас VirtualTreeView ;)
{RASkov} (2008-02-05 00:42:00) [2]> [17] elserpiente (04.02.08 09:48)
Как вариант:
ListView.StateImages.Height
т.е. ЛистВью в StateImages устанавливаем ImageList у которого выставляем Height...
Не совсем может "красиво", но может пойдет...
korneley (2008-02-05 00:07:00) [3]
> Ребята а как изменить высоту строки в режиме vsReport
Чё-то с ходу, получилось, что никак... У меня везде, где хотелось высоту строки изменить - TStringGrid.
elserpiente (2008-02-04 09:48:00) [4]Ребята а как изменить высоту строки в режиме vsReport
korneley (2008-02-02 21:03:00) [5]Проверил [14] - работает! А я, до этого, шрифты плодил/удалял... :( Но, вообще, это нестандарт. И нигде описание данной нестандартности найти не удалось.
{RASkov} (2008-02-02 20:44:00) [6]> вставьте Canvas.Refresh();
Да помоему будет достаточно в последний момент обработчика xxxDrawXxx
вставить:
with Sender.Canvas do
if Assigned(Font.OnChange) then Font.OnChange(Font);
Жуков Олег (2008-02-02 19:55:00) [7]Между изменениями свойств канваса вставьте Canvas.Refresh();
elserpiente (2008-02-02 15:22:00) [8]дык, а вопрос был про жирный текст. Как сделать в перемешку?
korneley (2008-02-02 15:15:00) [9]Да, и вдогонку, в OnDrawItem те же дела. Одним словом: взялись рисовать - рисуйте по-полной!
korneley (2008-02-02 15:01:00) [10]Или с цветом:
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 14:31:00) [11]
> 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
ketmar (2008-02-02 13:33:00) [12]>[8] elserpiente (02.02.08 13:30)
код?
кстати, не забываем, например, про страшное слово «кернинг». не забыли?
elserpiente (2008-02-02 13:30:00) [13]а почему при Canvas.Font.style := [fsItalic]
Canvas.TextWidth(aText[I]) возращает неверную ширину символа?
DVM (2008-02-02 13:16:00) [14]Если использовать именно OwnerDraw то никаких неожиданностей не случается.
ketmar (2008-02-02 12:13:00) [15]>[4] korneley©(02.02.08 10:11)
это как «отказывается»? код в студию.
elserpiente (2008-02-02 11:33:00) [16]2 korneley: есть пример кода в OnDrawItems ???
korneley (2008-02-02 10:11:00) [17]
> KilkennyCat © (02.02.08 05:49) [3]
> неожиданности случаются у детей.
Детские - да. Если в хэлпе написано, к примеру, что при сменеCanvas.Font.StyleвListView.OnDrawItems, должен измениться шрифт, а он, после первой перемены, отказывается меняться, это что, ожидаемое явление? Ну, назовите по другому: "баг", "глюк", "фича" в конце-концов... Суть не изменится. Всё равно несколько строк/символов разными шрифтами (вTListVIew, если он "репорт") через API выводить придётся. :)
KilkennyCat (2008-02-02 05:49:00) [18]> [2] korneley © (02.02.08 02:29)
> С ListView, если пользоваться TCanvas, TPen, TFont, e.t.c.,
> случаются неожиданности.
неожиданности случаются у детей.
korneley (2008-02-02 02:29:00) [19]С ListView, если пользоваться
TCanvas,TPen,TFont, e.t.c., случаются неожиданности. Обычно, при повторномизменении атрибутов рисования. Поэтому, если надо "шрифт с перемешкой с жирным шрифтом", то рекомендую рисовать через API/GDI, благо DC (Canvas.Handle) уже есть. Как рисовать:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=452
DVM (2008-02-01 23:43:00) [20]OwnerDraw