![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование Width в Length
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