Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование Width в Length


Страницы:   1 2

Arazel ©   (2005-10-29 20:49:00) 

Помогите вычислить длину текста по Width?


Anatoly Podgoretsky   (2005-10-31 09:33:00) [1]

Не надо ничего придумывать, вот вопрос автора
Помогите вычислить длину текста по Width?
Все остальное телепатия. Просто привыкните к тому, что данный автор практически никогда не может сформулировать вопрос и сделайте выводы. Часто ваши фантазии не имеют ничего общего, с тем что хотел спросить автора.

Тяжелая работа из болота тянуть бегемота.


sniknik   (2005-10-31 08:17:00) [2]

> а абсолютно не то.
= а решение дал абсолютно не то.


sniknik   (2005-10-31 08:14:00) [3]

homm ©   (31.10.05 00:48) [28]
> Вы додумали свою задачу и пришли к тому что решения нет. Я свою и пришел к решению. Вы правы а я нет. Почему?
потому, что додумал именно ты,  а мы поняли как есть. буквально.
Arazel ©   (29.10.05 21:00) [3]
> Помогите вычислить длину текста в  симолах по Canvas.TextWidth?
не обрезать, не подогнать под размер а вычислить...

что спрошено на то и ответ. и я так и считаю правильный ответ на это
Eraser ©   (29.10.05 21:07) [4]
isasa ©   (29.10.05 22:13) [5]
Юрий Зотов ©   (30.10.05 05:47) [6]
и дальнейшие уточнения не в счет, т.к. ты возражал именно на это
homm ©   (30.10.05 07:05) [7]
>>  задача общего решения не имеет.
> Отнюдь!
а не давал уточнение по возможной интерпретации ответа. или на дальнейшие уточнения. и упреки тебе именно поэтому, опроверг сказаное до этого сказал что это (написаное раньше тебя) имеет решение, а абсолютно не то.
впрочем я повторяюсь в sniknik ©   (30.10.05 22:30) [25] это уже говорил.

> sniknik ©   (30.10.05 11:08) [9]
>> Ты наверное до сих пор думаеш, что я количество точек считал? Наивный...
см.
sniknik ©   (30.10.05 20:25) [22]
> ты не нашол длинну строки из ширины, а обрезал существую строку под заданную ширину (т.е. частность).

не передергивай, и не додумывай за меня, читай.


homm   (2005-10-31 00:48:00) [4]

Вы додумали свою задачу и пришли к тому что решения нет. Я свою и пришел к решению. Вы правы а я нет. Почему?

> Я сказал, что в том виде, в котором задача сформулирована
В каком виде она додумана вами. А я возразил что решение имеит задача как она представилась мне (ну нет в [2][3] явного указания на извесность строки). Потом согласился что ВАША задача и правда решения не имеет. Так уж получилось, что когда условие было уточнено прав оказался я. Еще раз: к чему тогда [13] и [19]? Упреки что я не решил ВАШУ задачу?

sniknik ©   (30.10.05 11:08) [9]
Ты наверное до сих пор думаеш, что я количество точек считал? Наивный...


Юрий Зотов   (2005-10-30 23:51:00) [5]

> homm ©   (30.10.05 23:20) [26]

Вот-вот. Какого же Вы вставили свое "отнюдь"?

Я сказал, что в том виде, в котором задача сформулирована, она общего решения не имеет. Вы возразили. Тем не менее, этого самого общего решения не только не привели (и понятно, почему), но и в итоге признали, что да, общего решения нет.

Так что? Выходит, я был прав. А Вы - нет. И пишите еще хоть сто постов хоть из тысячи принципов, от этого ничего не изменится.

А что мне лучше - это уж я как-нибудь без Вас разберусь. До сих пор как-то разбирался и никому от этого вреда не было. Скорее, польза.

Ферштейн?

И гуд бай на этом.


homm   (2005-10-30 23:20:00) [6]

Если вы говорите что неправомерно ссылатся на [11], подразумевается что после [11] вы поняли задачу. Тогда какого вы пишете в [13] что задача (придуманая вами опять же) не имеет решения, и продолжаете в [19].


> кому лучше, мне? нет ...

Вот именно что вам лучше народ учить вопросы задавать, и убеждать в их неправильности вопроса. А тому кто задает вопрос лучше получить ответ на него. Игоизм.

Примечание
> как мне предварительно узнать по Width сколько символов в Caption поместится?
Ключевое слово поместится. Это значит что мы их туда помещать будем, а не считывать уже поместившиеся или что-то еще. А помещать абстактную, неизвестную строку в принципе абсурд. Она будет известна после получения и до помещения, вот тут то мы и сосчитаем ее...

То что не имеет решения  - задача ВАША. (Если надо в следующем посте это еше раз напишу, как сказал sniknikэто дело принципа).


sniknik   (2005-10-30 22:30:00) [7]

> Ну что ты распинаешся. Я уже сказал Да (читать предидущий пост). Я об этом есс-но осведомлен.
дело принципа, если сказано что белое то это именно белое а не бежевовое или очень очень светло серое.
особенно если ктото после сказал "нет, это белое", а показал светлозеленое.

сказал бы вместо "отнюдь" (отрицание всего что говорилось до/ т.е. попросту белое черным обозвал), "а возможно ему надо вот это...". и никаких вопросов/претензий к тебе бы не было (от меня точно).

> Лучше бы ты так же досканально пытался решить задачу, а не доказать ее нерешаемость.
кому лучше, мне? нет, мне не лучше. мое имхо в том, что лучше научить народ на форуме правильно вопросы задавать... т.к. правильно заданный вопрос это половина решения. и возможно в процессе составления правильного половина народа сама ответ найдет. вот это правильно.
а неправильно заданный/неопределенный это треп, тоже неплохо, живое общение... но это неправильно.


Юрий Зотов   (2005-10-30 22:13:00) [8]

> homm ©   (30.10.05 21:35) [23]

Неправомерно ссылаться на постановку задачи в [11], потому что [6] и [7] появились раньше. Ссылаться надо на сабж, [2] и [3], а там сказано совсем другое.


homm   (2005-10-30 21:35:00) [9]

Вы сами придумали такую задачу.
Исходные данные другие:

> Arazel ©   (30.10.05 11:28) [11]
>
> Элементарно:
>
> Есть кнопка, размер кнопки: Width – 98, Height – 22
> Так вот как мне предварительно узнать по Width
> сколько символов в Caption поместится?

Я так понимаю это нужно было для того чтобы последняя буква либо рисовалась, либо нет совсем, а не обрезалась. Если бы задача напрмер стояла ограничеть количество вводимых символов, то можно было бы на месте проверять, после каждого введенного символа, влезает ли он и обрезать его если нет. В любом случае речь идет о конкретной строке. Что строка не известна вы додумали сами! Жаль что у вас не хватило смекалки додумать что Width тоже не известен (вот уж действительно архиватор - частичная сумма не извесна, найти число членов ряда в этой сумме).

> вот возми свой же пример, и проверь
......

Ну что ты распинаешся. Я уже сказал Да (читать предидущий пост). Я об этом есс-но осведомлен. Лучше бы ты так же досканально пытался решить задачу, а не доказать ее нерешаемость.


sniknik   (2005-10-30 20:25:00) [10]

homm ©   (30.10.05 19:31) [21]
> вообще это старое слово в математике - зная частичную сумму ряда чисел и все члены ряда расчитать количество членов в
>  этой частичной сумме.
см.
sniknik ©   (30.10.05 17:59) [18]
>> и задача не имеет общего решения.
> она действительно не имеет общего решения, частные да. но вопрос то об общем.

ты не нашол длинну строки из ширины, а обрезал существую строку под заданную ширину (т.е. частность).

вот возми свой же пример, и проверь

TR: TRect;

MyString:= 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii';
TR := MakeRect(0, 0, 50 + Canvas.TextWidth ('...'), Canvas.TextHeight(MyString))
DrawText (Canvas.Handle, MyString, -1, TR, DT_SINGLELINE or DT_MODIFYSTRING or DT_END_ELLIPSIS);
Label1.Caption:= MyString;

MyString:= 'MMMMMMMMMMMMMMMMMM';
TR := MakeRect(0, 0, 50 + Canvas.TextWidth ('...'), Canvas.TextHeight(MyString))
DrawText (Canvas.Handle, MyString, -1, TR, DT_SINGLELINE or DT_MODIFYSTRING or DT_END_ELLIPSIS);
Label2.Caption:= MyString;

длинна (судя по твоим словам) будет одинакова... я в это не верю, и предлагаю проверить.
твои слова перед примером?
homm ©   (30.10.05 07:05) [7]
>>  задача общего решения не имеет.
> Отнюдь!
или отказываешся? (отрицание на то что не имеет, значит то что обшее решение имеется. верно?)


homm   (2005-10-30 19:31:00) [11]


> sniknik ©   (30.10.05 17:59) [18]
>
> > что подтвердил его теорию
> вообщето это не теория это факт.

Да.


> уверен что помог?

Arazel> Всем спасибо  особенно homm


> вообще это новое слово в математике - зная только сумму
> ряда чисел, расчитывают этот ряд в обратку... (сумма 1 число,
>  ряд > 1000 чисел и т.д. с +. крутейший архиватор можно
> сделать ;о)))

вообще это старое слово в математике - зная частичную сумму ряда чисел и все члены ряда расчитать количество членов в этой частичной сумме.
( -. Евгений Рошал спит спокойно :-\  )

2 Arazel
Совсем забыл, что из получившейся длины строки нужно вычесть три (три точки в конце строки).


Antonn   (2005-10-30 19:14:00) [12]

Arazel ©   (30.10.05 11:28) [11]
я так понял, что требуется просто узнать, сколько символов из caption'а поместится на кнопке, т.е. где его обрезать. В принципе Canvas.TextWidth хватит...


Юрий Зотов   (2005-10-30 19:07:00) [13]

> homm ©   (30.10.05 17:18) [17]

Еще раз спасибо, теперь уже за совет. Но я, пожалуй, все же ему не последую и книгу писать не стану. Поскольку нет смысла - книги на эту тему уже давно написаны и остается только их читать.

Есть есть большое желание убедиться, что при немоноширинном шрифте задача общего решения действительно не имеет, можете прогнать свой код при разном содержимом строки, сравнить результаты и убедиться, что они зависят от этого самого содержимого.

А чтобы убедиться в этом наглядно , можете даже запустить вот эту простенькую программку:

procedure TForm1.FormActivate(Sender: TObject);
const
 N = 10;
var
 S: string;
 Ch: char;
 i: integer;
begin
 SetLength(S, N);
 for Ch := 'a' to 'z' do
 begin
   for i := 1 to N do
     S[i] := Ch;
   ListBox1.Items.Add(S)
 end
end;

и с удивлением обнаружить, что в прямоугольнике шириной, например 30 пикселей умещается разное количество разных символов (например 'i' и 'm').

О чем и было сказано.


sniknik   (2005-10-30 17:59:00) [14]

homm ©   (30.10.05 17:18) [17]
> что подтвердил его теорию
вообщето это не теория это факт.

> пожалуста Arazel © что смог помоч ;)
уверен что помог? вопрос был один, ответ дает не то что задано, возможно конечно вопрос коряво задан и ответ именно нужный, а если нет? и на базе неверных знаний будет написана программа, а после будет глюк и будет долгое выяснение причин... возможно будет потрачено гораздо больше времени чем сейчас понять и сделать правильно.

> и задача не имеет общего решения.
она действительно не имеет общего решения, частные да. но вопрос то об общем.

вообще это новое слово в математике - зная только сумму ряда чисел, расчитывают этот ряд в обратку... (сумма 1 число, ряд > 1000 чисел и т.д. с +. крутейший архиватор можно сделать ;о)))


homm   (2005-10-30 17:18:00) [15]

Пожалуста Юрию зотову что подтвердил его теорию, он теперь может даже книгу напишет где научно обоснует, и ОГРОМНОЕ пожалуста Arazel © что смог помоч ;)

PS Надо бы еще одиу вкладку форума сделать. Задаеш там вопрос, а тебе аргументировано доказывают, что начальные условия не верны, и задача не имеет общего решения.


Arazel   (2005-10-30 15:33:00) [16]

Всем спасибо  особенно homm ©   (30.10.05 07:05) [7]


Юрий Зотов   (2005-10-30 15:03:00) [17]

> XProger ©   (30.10.05 15:00) [14]

Спасибо Вам за то, что подтвердили практическим примером мои слова о том, что "При немоноширинном шрифте длина разного текста будет разной, поэтому задача общего решения не имеет", приведя код, результат которого будет зависеть от содержимого строки Str.

:о)


XProger   (2005-10-30 15:00:00) [18]


  old := SelectObject(h_DC, font);
  GetTextExtentPoint32(h_DC, Str, length(Str), sz);
  SelectObject(h_DC, old);
  Result := sz.cx;


Юрий Зотов   (2005-10-30 13:46:00) [19]

> homm ©   (30.10.05 07:05) [7]

Спасибо Вам за то, что подтвердили практическим примером мои слова о том, что "При немоноширинном шрифте длина разного текста будет разной, поэтому задача общего решения не имеет", приведя код, результат которого будет зависеть от содержимого строки MyString.

:о)


Zacho   (2005-10-30 11:58:00) [20]

Arazel ©   (30.10.05 11:28) [11]

Тебе уже сказали, что это возможно только для моноширинных шрифтов. И даже код привели в Юрий Зотов ©   (30.10.05 5:47) [6]

А вот обратную задачу (узнать размеры контрола, необходимые для того чтобы в него полность поместился определённый текст) решить очень просто - вызвать DrawText c флагом DT_CALCRECT


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо