Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.02;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
15-1221041799
define
2008-09-10 14:16
2008.11.02
Обмен данными между оператором связи и службой webmoney.


15-1220277220
oldman
2008-09-01 17:53
2008.11.02
Предупреждение "начинающим"


2-1222402880
123-ий
2008-09-26 08:21
2008.11.02
Соединение с Инетом


2-1222241412
Nick87
2008-09-24 11:30
2008.11.02
SQLзапрос


1-1200976524
skiph
2008-01-22 07:35
2008.11.02
WebBrowser и Word