Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListBox, Delphi 6 
:(
    Опции темы
Black_Joker
Дата 18.1.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



В элементы ListBox надо вписать строки, длина которых превышает размер окна.
Как это можно сделать?

PM   Вверх
Rennigth
Дата 18.1.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



т.е. ... smile , на следующую строчку перенести?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Snowy
Дата 18.1.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Засунуть ListBox в ScrollBox
PM MAIL   Вверх
Akella
Дата 18.1.2005, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
длина которых превышает размер окна.

Вопрос задан некоректно smile
Добавляй, в чем дело? Какие проблемы?
PM MAIL   Вверх
Snowy
Дата 18.1.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А что тут некорректного? У ListBox'a вертикальный скрол есть, а горизонтального нет. Как посмотреть, что не влезло? Направо не подвинуться...
PM MAIL   Вверх
_hunter
Дата 18.1.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



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


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Akella
Дата 18.1.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Находим ширину, в пикселях самой длинной строки. Посылаем сообщение LB_SETHORIZONTALEXTENT для установки горизонтальной прокручиваемой ширины, в пикселях. Плюс 2 доп. пикселя добавлены к MaxWidth, чтобы сдвинуть оконечные символы от правой границы.


Код

procedure TfmMain.FormCreate(Sender: TObject);
var
 i, MaxWidth: integer;
begin
 MaxWidth := 0;
 for i:=0 to ListBox1.Items.Count-1 do
   if MaxWidth<ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[i]) then
     MaxWidth:=ListBox1.Canvas.TextWidth(ListBox1.Items.Strings[i]);
 SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);
end;

Добавлено @ 16:52
а можно использовать всплывающую подсказку

Код

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
const
 oldidx : Longint = -1;
var
 idx : Longint;
begin
 with Sender as TListBox do begin
   idx := ItemAtPos(Point(x,y),True);
   if (idx < 0) or (idx = oldidx) then Exit;
   Application.ProcessMessages;
   Application.CancelHint;
   oldidx := idx;
   Hint := '';
   if Canvas.TextWidth(Items[idx]) > Width - 4 then Hint:=Items[idx];
 end;
end;




или



procedure TfmDWMain.lbSearchMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var
 ItemNum: Integer;
begin
 ItemNum := lbSearch.ItemAtPos(Point(X, Y), True);
 if (ItemNum <> HintRow) then
 begin
   HintRow := ItemNum;
   Application.CancelHint;
   if HintRow > -1 then
   begin
     HintString := lbSearch.Items[ItemNum];
     if (lbSearch.Canvas.TextWidth(HintString) <= lbSearch.ClientWidth - 25) then
       HintString := '';
   end
   else
     HintString := '';
 end;
end;

procedure TfmDWMain.OnShowHint(var HintStr: string;
 var CanShow: Boolean; var HintInfo: THintInfo);
begin
 if not (HintInfo.HintControl is TListBox) then Exit;
 with HintInfo.HintControl as TListBox do begin
   HintInfo.HintPos := lbSearch.ClientToScreen(Point(21,
     lbSearch.ItemRect(HintRow).Top + 1));
   HintStr := HintString;
 end;
end;





Это сообщение отредактировал(а) dsergey - 18.1.2005, 16:48
PM MAIL   Вверх
Black_Joker
Дата 19.1.2005, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



Ве гораздо проще...

Есть строка
**********************************************************
А помещается только
#################

Как сделать, чтобы всю строку было видно (т.е. перенос по словам)? Желательно без горизонтального скролера.

PM   Вверх
Akella
Дата 19.1.2005, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Какой вопрос, такой ответ.
PM MAIL   Вверх
Dynamic
Дата 19.1.2005, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Black_Joker
Цитата(Black_Joker @ 19.1.2005, 08:59)
Как сделать, чтобы всю строку было видно (т.е. перенос по словам)? Желательно без горизонтального скролера

Может, тогда лучше будет использовать TMEmo без гориз.скроллбара с WordWrap = true??


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Akella
Дата 21.1.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



ставь пакет JVCL
может и высходники заглянешь. smile

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  __________.JPG
PM MAIL   Вверх
Marriage
Дата 21.1.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



ПРедлагаю следущий метод, говорю сразу - он намудреный, но мне понравилось. :-)

Нужно кинуть на фому TLabel, где Visible =FALSe, AutoSize=true;

Затем при добавлении новой строки делать следующее

Код

//  Str - добавляемая строка

 Label1.Caption:= str;

 If Label1.Width > ListBox1.Width then
    ListBox1.Width:=Label1.Width+4;



ПРоверь, должно сработать :-)




--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.