Высота текста в TLabel
От: lsv  
Дата: 29.06.06 05:59
Оценка:
Есть TLabel у него AutoSize=false, WordWrap=true. Как узнать высоту текста записанного в него?
Re: Высота текста в TLabel
От: ekamaloff Великобритания  
Дата: 29.06.06 06:16
Оценка:
Здравствуйте, lsv, Вы писали:

lsv>Есть TLabel у него AutoSize=false, WordWrap=true. Как узнать высоту текста записанного в него?


var
    R: TRect;
    H: Integer
begin
    SetRect(R, 0, 0, Label.Width, 0);
    H := DrawText(Canvas.Handle, PChar(Label.Caption), -1,
        R, DT_CALCRECT or DT_WORDBREAK);
    // ...
end;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re: Высота текста в TLabel
От: mpn_arv  
Дата: 29.06.06 12:45
Оценка: -1
Здравствуйте, lsv, Вы писали:

lsv>Есть TLabel у него AutoSize=false, WordWrap=true. Как узнать высоту текста записанного в него?


Может так подойдёт?

uses Types;

    ...

var
    tsize: tagSIZE;

    ...

  GetTextExtentpoint(Lablel.Canvas.Handle, PChar(Lablel.Caution), length(Lablel.Caution), tsize);
    
    tsize.cx
    tsize.cy
... << RSDN@Home 1.1.4 beta 2 >>
Re[2]: Высота текста в TLabel
От: ekamaloff Великобритания  
Дата: 29.06.06 13:18
Оценка:
Здравствуйте, mpn_arv, Вы писали:

_>
_>uses Types;

_>    ...

_>var
_>    tsize: tagSIZE;

_>    ...

_>  GetTextExtentpoint(Lablel.Canvas.Handle, PChar(Lablel.Caution), length(Lablel.Caution), tsize);
    
_>    tsize.cx
_>    tsize.cy
    
    
_>


1) Зачем использовать tagSize когда есть человеческий TSize???
2) Зачем для локальных переменных использовать имена существующих типов???
3) Что есть Caution??? Типа внимание, ща вылетит птичка ? Ну я конечно догадываюсь что Caption, но повеселил
4) Ну и результат естественно будет не всегда верный
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[3]: Высота текста в TLabel
От: mpn_arv  
Дата: 29.06.06 13:36
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>1) Зачем использовать tagSize когда есть человеческий TSize???

Это не имеет принципиального значения. Каждый использует то, что пивычней.

E>2) Зачем для локальных переменных использовать имена существующих типов???

Для примера что в голову пришло.

E>3) Что есть Caution??? Типа внимание, ща вылетит птичка ? Ну я конечно догадываюсь что Caption, но повеселил

Это есть опечатка.

E>4) Ну и результат естественно будет не всегда верный

Какие случаи имеются ввиду?
... << RSDN@Home 1.1.4 beta 2 >>
Re[4]: Высота текста в TLabel
От: mpn_arv  
Дата: 29.06.06 13:44
Оценка:
Здравствуйте, mpn_arv, Вы писали:

E>>4) Ну и результат естественно будет не всегда верный

_> Какие случаи имеются ввиду?

Забыл упомянуть что решение подходит для однострочного текста.
... << RSDN@Home 1.1.4 beta 2 >>
Re[4]: Высота текста в TLabel
От: ekamaloff Великобритания  
Дата: 29.06.06 13:51
Оценка:
Здравствуйте, mpn_arv, Вы писали:

E>>1) Зачем использовать tagSize когда есть человеческий TSize???

_> Это не имеет принципиального значения. Каждый использует то, что пивычней.

Это не имеет принципиального значения когда ты работаешь один.

E>>4) Ну и результат естественно будет не всегда верный

_> Какие случаи имеются ввиду?

Когда текст не вмещается по ширине и переносится на следующую строку (возможно несколько строк). Твой вариант всегда возвращает высоту одной строки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[5]: Высота текста в TLabel
От: ekamaloff Великобритания  
Дата: 29.06.06 14:01
Оценка:
Здравствуйте, mpn_arv, Вы писали:

_>Забыл упомянуть что решение подходит для однострочного текста.


А нафига ты его привел тогда?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[5]: Высота текста в TLabel
От: mpn_arv  
Дата: 29.06.06 14:03
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>>>1) Зачем использовать tagSize когда есть человеческий TSize???

_>> Это не имеет принципиального значения. Каждый использует то, что пивычней.

E>Это не имеет принципиального значения когда ты работаешь один.

В данном случае это просто пример, не надо утрировать.


E>>>4) Ну и результат естественно будет не всегда верный

_>> Какие случаи имеются ввиду?

E>Когда текст не вмещается по ширине и переносится на следующую строку (возможно несколько строк). Твой вариант всегда возвращает высоту одной строки.

Не совсем верно понял вопрос. Про одну строку согласен на все 100.
... << RSDN@Home 1.1.4 beta 2 >>
Re: Высота текста в TLabel
От: lsv  
Дата: 30.06.06 05:00
Оценка:
Из 2-х предложенных вариантов верный только:
h = DrawText(Label3->Canvas->Handle, Label3->Caption.c_str(), -1, &Rrr, DT_CALCRECT | DT_WORDBREAK);

Я задал вопрос, чтобы понять как определить высоту текста в Label, когда он именно переносится на новые строки. Сперва попробовал выриант h = Label3->Canvas->TextHeight(Label3->Caption); он оказался неверным, тогда и зашел на форум.
Re[5]: Высота текста в TLabel
От: Аноним  
Дата: 30.06.06 14:03
Оценка:
E>>>1) Зачем использовать tagSize когда есть человеческий TSize???
_>> Это не имеет принципиального значения. Каждый использует то, что пивычней.
E>Это не имеет принципиального значения когда ты работаешь один.

Коллективные привычки — тоже привычки Может у них _в_команде_ так привычнее.

Кстати, вроде у TCanvas есть метод TextExtent ?
Re[6]: Высота текста в TLabel
От: ekamaloff Великобритания  
Дата: 30.06.06 14:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Коллективные привычки — тоже привычки Может у них _в_команде_ так привычнее.


Если в команде привычнее использовать tagSize имхо это какая-то неправильная команда.

А>Кстати, вроде у TCanvas есть метод TextExtent ?


Есть, но при чем тут он? Он работает через тот же GetTextExtentPoint
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[7]: Высота текста в TLabel
От: Аноним  
Дата: 03.07.06 06:45
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Здравствуйте, <Аноним>, Вы писали:


А>>Коллективные привычки — тоже привычки Может у них _в_команде_ так привычнее.


E>Если в команде привычнее использовать tagSize имхо это какая-то неправильная команда.


А>>Кстати, вроде у TCanvas есть метод TextExtent ?


E>Есть, но при чем тут он? Он работает через тот же GetTextExtentPoint


Т.е. использовать типы из С-шного Win SDK — это изврат и неправильная команда.
Использовать вместо родных для VCL (вероятно также и CLX и VCL.Net) функции и того же C-шного Win SDK — это нормально, и даже "при чем тут" родные VCL-ные методы.

Почему для типов изврат — одно, а для функций — изврат противоположное ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.