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

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

Как ? 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 >> имеется ввиду что строка(и) уже там


Наверх

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