IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Отображение CheckListBox
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Возникло две проблемы с этим компонентом:
1) Как сделать, чтобы автоматично переводилась строка, если "нет места"? То есть, если строка длиннее компонента, та часть, что не влезает, должна "уйти" вниз.
2) Что надо поставить, чтобы "от руки" изменять размер компонента? ТИпа СкроллБокса, но для изменения размера.
Спасибо wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






1. Код можно и усовершенствовать, но идея такая:

Сначала
Style := lbOwnerDrawFixed;

Потом увеличиваешь ItemHeight для CheckListBox-а в 2 раза, и на событие OnDrawItem вешаешь код:

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var

Sentence,
CurWord: string;
SpacePos,
CurX, CurY: Integer;
EndOfSentence: Boolean;

begin

with (Control as TCheckListBox) do begin
Canvas.Font.Size:=8;
Canvas.FillRect(Rect);

CurX := Rect.Left;
CurY := Rect.Top;

Sentence := Items[Index];
EndOfSentence := FALSE;

while (not EndOfSentence) do begin

SpacePos := Pos(' ', Sentence);
if SpacePos > 0 then begin
CurWord := Copy(Sentence, 0, SpacePos);
Sentence := Copy(Sentence, SpacePos + 1, Length(Sentence) - SpacePos);
end
else begin
EndOfSentence := TRUE;
CurWord := Sentence;
end;

with Canvas do begin
if (TextWidth(CurWord) + CurX) > Rect.Right then begin
CurY := CurY + TextHeight(CurWord);
CurX := Rect.Left;
end;

TextOut(CurX, CurY, CurWord);
CurX := CurX + TextWidth(CurWord);
end;
end;

end;
end;

(С) ViktorXP

Вот так оно выглядит:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

Репутация: -  0  +


Что-то не работает у меня этот код, ну и ладно - это наверное довольно сложно сделать возможность изменения вручную размера бокса в паре с автоматическим переводом строки.

Тогда есть два варианта:
1) (проще, но хуже) - сделать скроллбокс для листбокса, и, взависимости от размера строки изменять размер листбокса, что приведет к появлению линиии прокрутки. НО, насколько я понял, атоподстройку размера в CheckListBox (что-то типа AutoSize) сделать невозможно. Есть, конечно, уж очень простой (и не очень эфективный) вариант - подсчитать самую длинную строку и изменить размер CheckListBox (средний размер букв+20% или на число пикселей самой длинной буквы, умноженное на число символов). Меня интересует следущее - есть ли более надежный вариант? wink.gif
2) Сделать что-то с регулятором размера - никаких соображений в этой области. Какой компонент отвечает за это? rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Не лучше при проведении мышью над TCheckListBox-ом показывать в качестве подсказки полную строку?
Прикрепленное изображение

Как это реализовать - см. Drkb -> VCL -> ListBox, CheckListBox, DbLookUp, Другие списки -> Показ in-place подсказки в TListBox и других компонентах

, а то опять начнешь говорить, что у тебя мой код не работает dry.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.09.2020 20:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name