![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ? 2 вопроса [D3, Win95/98]
allrussia © (2002-05-27 04:34:00)1.Дано: Form1.Label1.Caption - с несколькими строчками текста (wordwrap включен). Как узнать значение Top относительно формы
у последней строки этой метки. (имхо надо узнать количество строк , помножить на (размер шрифта+расстояние между строчками), плюс высота первой строки. Но в голову не приходит как узнать.
2. Как запретить помещение в Listbox какой-то строки, например с названием "OPTIONS";
Пишу:
with ListBox do
for i:=0 to count-1 do
if UpperCase(ListBox.Items.Strings[i])="OPTIONS" then delete(i)
не работает..... ошибка out of bounds
Поправьте код, подозреваю что нужно downtoно не знаю как
allrussia (2002-05-28 06:57:00) [1]rhf - поделиться советом никогда не поздно! :))))))))
rhf (2002-05-28 02:42:00) [2]out of bounds было потому, что вы запускали на прохождение всех элементов, а в середине один или несколько удаляли, соответственно их становилось меньше чем то количество, которое вы собрались просмотреть
allrussia (2002-05-28 02:20:00) [3]Sniffer - спасибо, я уже сам догадался
Просто ты вначале написал to, поэтому...
Sniffer (2002-05-27 07:17:00) [4]>Walker
with ListBox do
for i:=count-1 DOWNTO 0 do
if UpperCase(ListBox.Items.Strings[i])="OPTIONS" then ListBox.Items.delete(i)
>allrussia
Только (2) цикл не работает - может из-за Delphi3?
Это врядли :)
allrussia (2002-05-27 06:43:00) [5]Walker >> СпаСи6ище
Только (2) цикл не работает - может из-за Delphi3?
Я проверял у меня с конца циклы не работают
Walker (2002-05-27 04:54:00) [6]1.
есть функция:
windows.DrawText(...);
например выглядеть это будет так
var
r: TRect;
h: Integer;
begin
r:=Rect(0, 0, Label1.Width, 0);
DrawText(Label1.Canvas.Handle,
PChar(Label1.Caption), -1, r,
DT_CALCRECT or
DT_LEFT or
DT_WORDBREAK
);
h:=Label1.Canvas.TextHeight("1");
end;
вот..... после выполнения этих ф-ций:
r - содержит размеры всего текста (r.Bottom - r.Top = высота всего текста)
h = высота одной строки
следовательно
Top_X := r.Bottom - r.Top + h; - то что требовалось найти
2. всё верно, цикл надо проходить от конца к началу, с низу-вверх:
with ListBox do
for i:=count-1 to 0 do
if UpperCase(ListBox.Items.Strings[i])="OPTIONS" then ListBox.Items.delete(i)
allrussia (2002-05-27 04:37:00) [7]ко 2 >> имеется ввиду что строка(и) уже там