Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  09:08[Войти] | [Зарегистрироваться]
Ответ на вопрос № 49421

19-02-2007 03:19
Товарищи! А как бы сделать чтобы CheckBox отображал не одну строку, а много?Т.е.

+ здесь длинный и
  бесполезный текст

а не

+ здесь длинный и бесполезный текст.

Подскажите плз!

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

19-02-2007 16:03 | Комментарий к предыдущим ответам
>>> Кстати, прием с подменой TPanel, описанный в »вопрос КС №35814« скорее
>>> можно назвать шаманским, т.к. он имеет в качестве побочного эффекта изменение
>>> поведения всех панелей на форме.

Так это иногда даже хорошо.

А если в форме наряду с модифицированной панелью нужна пара обычных панелей? Вводить свойство ThisIsUsualDelphiPanel? (я специально написал подлиннее). Чем плох вариант использования двух обработчиков по одной строке вместо отдельного класса на один единственный случай во всем проекте?

А если таких CheckBox-ов на форме десяток - ко всем применять "ювелирную работу"?! Зачем? Двумя строчками кода можно добавить в компонент полезную, но неучтенную возможность!

А если такой чекбокс нужен один на весь проект?

P.S. Поскольку дискуссия достаточно далеко отклонилась от обсуждения первоначального вопроса, вношу предложение перебраться в ветку об оптимизации кода: »сообщение 391 в теме №356 на БП«

19-02-2007 08:48 | Комментарий к предыдущим ответам
Третий понятие "шаманский способ" считает общепризнанным.

Скорее всего смысл слова "шаманский" в моем понимании и в данном случае несколько отличается от аналогичного в понимании Антона Григорьева. Он у меня не вызывает никакого отторжения, скорее даже наоборот - интересный безопасный способ, а слово "шаманский" подразумевает нестандартный, как бы магический. Обман среды как никак! Надеюсь, на такое определение с моей стороны никто не обиделся. Я и сам люблю такие шаманизмы, можно даже сказать, коллекционирую! :)

Млин, который раз уже это обсуждается на КС! Скоро можно будет не то что статью, книгу писать ;)

PS: А вот еще одна причина, по которой я назвал его "шаманским". Я именно по этому слову и ищу этот вопрос в поиске по КС ;-) Вот и прицепилось...

19-02-2007 08:16
Кстати, прием с подменой TPanel, описанный в »вопрос КС №35814« скорее можно назвать шаманским, т.к. он имеет в качестве побочного эффекта изменение поведения всех панелей на форме.

Так это иногда даже хорошо. А если таких CheckBox-ов на форме десяток - ко всем применять "ювелирную работу"?! Зачем? Двумя строчками кода можно добавить в компонент полезную, но неучтенную возможность!

19-02-2007 08:03 | Комментарий к предыдущим ответам
>>> Но он не шаманский
А его я и не называл шаманским. У меня к нему совсем другие претензии. Основанные на личном (не очень радостном) опыте.

19-02-2007 07:57
Нет, ребята. Лучше не мухлевать, пытаясь изобразить CheckBox комбинацией других компонент. Способ вредный (требует непродуктивных затрат времени) и косячный (на своем компе работает почти как надо, а на другом -- косяки лезут).

Приведенный мной способ может быть удачным или неудачным. Но он не шаманский. Это обычное взаимодействие компонентов. Единстенное отличие состоит в том, что эти компоненты сгруппированы территориально. Я специально сделал оговорку, что этот способ имеет смысл применять, если это одноразовая потребность. Кстати, прием с подменой TPanel, описанный в »вопрос КС №35814« скорее можно назвать шаманским, т.к. он имеет в качестве побочного эффекта изменение поведения всех панелей на форме. А у меня - ювелирная работа "по месту" (тут должно быть смайло).

>>>А вопрос 35814 давно затерялся среди других и его уже вряд ли кто-то найдет...

Ну почему-же? Его здесь уже третий раз упомянают, только ленивый его еще не посмотрел...

19-02-2007 07:53 | Комментарий к предыдущим ответам
>>> Да напишите Вы статью по этой теме уже!!!
Мне просто было неитересно писать статью по вопросу, который уже "облизан" со всех сторон. Но, видимо, придется. Если "редколегия" пропустит ;-0

to Андрей Токинов:
"Там за маской зверя скрывается человек. Здесь за маской человека скрывается зверь" (Стивен Кинг "Вести из мертвой зоны")

Просто это тот случай, когда метод, шаманский по форме, является абсолютно надежным и корректным. Однако оставляет у людей чувство "легкой неправильности" из-за этой своей похожести на шаманизм.

19-02-2007 07:27 | Комментарий к предыдущим ответам
воспользуйтесь шаманским способом от Geo
Один продемонстрировал способ.
Второй бездоказательно назвал его шаманским.
Третий понятие "шаманский способ" считает общепризнанным.

19-02-2007 07:09 | Комментарий к предыдущим ответам
Geo
Да напишите Вы статью по этой теме уже!!! Проблема, как видите актуальна, а решение - оригинально. Многим было бы интересно узнать об этом. А вопрос 35814 давно затерялся среди других и его уже вряд ли кто-то найдет...

19-02-2007 06:43
Нет, ребята. Лучше не мухлевать, пытаясь изобразить CheckBox комбинацией других компонент. Способ вредный (требует непродуктивных затрат времени) и косячный (на своем компе работает почти как надо, а на другом -- косяки лезут).

Если нужно какое-то свойство, которого нет в стандартном компоненте, то надо этот стандартный компонент переписать под собственные нужды. Нет в этом ничего хитрого, для этого ООП и предназначено. Затраты времени, конечно, тоже есть, но это продуктивные затраты.

Да, вдогонку Ins'у... Разработка нового класса вовсе не требует регистрации его в библиотеке VCL. Особенно, если это небольшое изменение, которое требуется для данной конкретной задачи и только для нее. Builder и VCL -- это инструмент разработки, но они не заменяют собой все программирование.

19-02-2007 06:10
Если это одноразовая потребность, то можно не плодить наследников, а сделать примерно так:
Помещаем на форму CheckBox, StaticText и Shape.
В инспекторе объектов делаем назначения, аналогичные коду:

  CheckBox1.Caption := '';
  StaticText.AutoSize := False;

  with Shape1 do
  begin
    Shape := stRectangle;
    Pen.Mode := pmMask;
    Pen.Style := psDot;
  end;


Ну, и сам код:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Shape1.Visible := (ActiveControl = CheckBox1);
  {Если не хочется подгонять ручками}
  with StaticText1 do
    Shape1.SetBounds(Left-1, Top-1, Width+2, Height+2);
end;

procedure TForm1.CheckBox1Enter(Sender: TObject);
begin
  Shape1.Show;
end;

procedure TForm1.CheckBox1Exit(Sender: TObject);
begin
  Shape1.Hide;
end;

procedure TForm1.StaticText1Click(Sender: TObject);
begin
  ActiveControl := CheckBox1;
  CheckBox1.Checked := not CheckBox1.Checked;
end;


Единственный недостаток этого способа состоит в том, что пунктир получается немного "нестандартным".

19-02-2007 05:22 | Комментарий к предыдущим ответам
>>>Млин, нету его в Д5 =( Только для CustomLabel. Что делать-то? Или я опять торможу?
Нее не тормозишь, просто про версию Delphi я както не подумал у меня D2006.

19-02-2007 03:49
Серьезно нет? Странно. Тогда перекройте CreateParams

procedure TMyCheckBox.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or BS_MULTILINE;
end;


А чтобы не плодить наследника, воспользуйтесь шаманским способом от Geo
http://ww.delphikingdom.com/asp/answer.asp?IDAnswer=35814

19-02-2007 03:41 | Сообщение от автора вопроса
Это элементарно Ватсон :)
WordWrap:=True;


Млин, нету его в Д5 =( Только для CustomLabel. Что делать-то? Или я опять торможу?

19-02-2007 03:37 | Комментарий к предыдущим ответам
А, чекбокс!!! А я о чем... о ListBox и ComboBox :) Каюсь, виноват...

19-02-2007 03:24
Обрабатывать OnMeasureItem и OnDrawItem и самому отрисовывать текст. Для вывода текста в несколько строк удобно использовать функцию DrawText и ее же для измерения высоты многострочного текста. Ознакомьтесь с ней сами в SDK. Только учтите, что высота элемента списка не может быть больше 256 пикселей

19-02-2007 03:23
Это элементарно Ватсон :)
WordWrap:=True;

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Вода мокрая или сухая?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования