Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Люди подскажите плиз срочно!!!


Автор: fifo79 8.5.2003, 13:09
Здраствуйте! у меня возникла такая проблема:
я написал программу на Дельфи для тестирования знаний
есть вопрос и к нему идут 3 ответа, но вот проблема как сделать так чтобы кнопка с ответами увеличивалась по размеру автоматический, т.е.
ответы выполнены в виде конпок где отображатеся текстовая информация, проблема в следующем при занесении большой информации для ответо, данные не помещаются в кнопку и отображаются обрывисто, подскажите пожалйста как сдеалть так чтобы размер кнопкеи автоматический менялся при большой информации он вмешалбы всю информацтю и правильно его отображал.
Заранее благодарен

Автор: Georg4 8.5.2003, 13:26
А чего б тебе не сделать кнопку заранее больше, если она будет скакать в размерах получится некрасиво.
Или если так уж хочешь, то вместо кнопки поставь лейбл и просто подставь фунцию он клик.

Автор: emchenko 8.5.2003, 14:59
текст распологается в одну строку или несколько?

Автор: AntonSaburov 8.5.2003, 16:19
Цитата
А чего б тебе не сделать кнопку заранее больше, если она будет скакать в размерах получится некрасиво.


IMHO - разумно. Пусть будут просто большие кнопки.

Хотя, IMHO, еще более прилично было бы сделать класс, который имеет стандатный размер, но может скролироваться. Он умеет отображать ответ. При попадании мышки в этот объект менять курсор на "палец".

Кроме этого такой объект может иметь фокус и он это показывает путем изменения вида кромки. Между объектами двигаться как обычно кнопкой Tab.

При нажатии Enter считается выбраным ответ в фокусе.

Причем такой подход удобен для дальнейшего расширения системы (а вдруг захочется рисунки выводить - без смены логики всей прораммы просто делаем круче сам объект.

Можно пойти еще дальше и оббъявить базовый класс, который умеет выводить текст, а потом пораждать от него остальные.
Логика работы программы за счет полиморфизма может оставаться неизменной.
А вот какой объект создавать - можно узнаьт при считывании вопроса их базы, в которой прописано, какого точно типа сосздавать объекты.

Вообщем, круто biggrin.gif

Автор: fk_ 10.5.2003, 16:18
Хех а я посоветовал бы естесно создать свой компонент на базе стандартной кнопки просчитывающий количество символов и в зависимости от этого меняющий размеры... но на самом деле можно и без этого обойтись... smile.gif
А самое простое, думаю, это дублировать информацию в свойство Hint и поставить истину на отображение подсказок... smile.gif

Автор: neutrino 11.5.2003, 10:34
А может просто:

Код

TextLength:=Button1.Canvas.GettLength(Button1.Caption);
Button1.Width := TextLength+10;


Ну, конечно как функция GetTextLength называется я точно не помню, но ...

Автор: 78125 11.5.2003, 16:41
Обычно тесты делают при помощи radiobutton

Автор: &-ray 11.5.2003, 19:40
По-моему проще сделать, как сказал Georg4:
вместо кнопки использовать tlabel с wordwrap=true
А чтоб смотрелось все путем можно обрамить все это дело в tbevel и при клике менять вид границ этого bevel - чем не кнопка?

Автор: neutrino 14.5.2003, 09:41
Можно сделать еще 500 разными способами, но вопрос не в этом.

Автор: emchenko 14.5.2003, 13:29
Товарищи! ну человек же просит: "плз. срочно...". Делом же занят, не курсач какой-нибудь задрипанный, но проект пишет! Да как нарисовать красивее он, наверное, знает (а если и не знает, то какое нам дело). Наша задача конкретно ответить на вопрос. Человеку важна не мораль, а способ решения...

братель, брось на форму кнопку (у меня так сложилось что Button3) и Edit. Событие Click у кнопки выглядит так:
Код

procedure TForm1.Button3Click(Sender: TObject);
var xCanvas: TCanvas;
begin
 xCanvas := TCanvas.Create;
 with Button3 do
 begin
   Caption := Edit1.Text;
   xCanvas.Handle := GetWindowDC(Handle);
   Width := xCanvas.TextWidth(Caption) + 6;
   Refresh;
   xCanvas.LineTo(Width, Height);
   xCanvas.MoveTo(Width, 0);
   xCanvas.LineTo(0, Height);
   xCanvas.Destroy;
 end;
end;


один из 500 я взял на себя... smile.gif (что с людми похмелье делает).
кстати, братель, я кнопку зачеркнул, так просто (последние 5 строчек), если не понравиться убери;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)