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

> ВНИМАНИЕ!

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

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

 
 Ответить  Открыть новую тему 
> задача на изменение цвета фона
сообщение
Сообщение #1


Гость






Ув. программисты на дельфи, помогите пожалуйста с такой задачей:

1) Создать главное окно, содержащее меню вида: Input color, Change, Exit, при выборе Exit программа закрывается.
2) При выборе Input color открывается диалоговое окно, содержащее 3 поля типа Tedit, группу из 2-x кнопок TCheckBox в TGroupBox (кнопки left и right) и кноgre ок типа TBitBtn
В поля TEdit вводятся 3 ргб составляющие цвета. При выборе Change изменяется на заданный цвет фон главного окна (левая, правая или обе половины соответственно, в зависимости от выбора кнопок в диалоговом окне)

Так как я никогда не писал в дельфях, а задачу нужно срочно, то у меня возникла такая проблема:
Каким образом реализовывать изменение цвета? Насколько глупым будет создать две TPanel (соответственно, левую и правую) и красить в нужный цвет их?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
создать две TPanel (соответственно, левую и правую) и красить в нужный цвет их?
Можно, конечно, и так... А можно просто отрисовать на канве формы:
  var i: integer;
...
Form1.Canvas.Brush.Color := ... // нужный тебе цвет.
i := byte(RadioButton1.Checked) + 2 * byte(RadioButton2.Checked);
Form1.Canvas.FillRect(Rect((form1.Width div 2) * (i - 1), 0, (form1.Width div 2) * i, form1.Height));

где Radiobutton1 отвечает за левую часть формы, а RadioButton2 - за правую...

P.S.
А, у тебя должен быть CheckBox? Я почему-то прочитал RadioButton... Тогда вот так:

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
Form1.Canvas.Brush.Color := ... // Твой цвет ...
if CheckBox1.Checked then // Левая сторона
Form1.Canvas.FillRect(Rect(0, 0, form1.Width div 2, form1.Height));
if CheckBox2.Checked then // Правая сторона
Form1.Canvas.FillRect(Rect(Form1.Width div 2, 0, form1.Width, form1.Height));
end;


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Знаю, но:
а) про то, что надо обрабатывать сворачивание/разворачивание не было речи;
б) я не даю полное решение (и ты тоже об этом знаешь) - только показываю идею.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






А почему бы и не поставить две пенли, только сделать это динамически.
Завести две глобальные переменные: panel,panel2:tpanel;
И написать такой код
procedure TForm1.FormCreate(Sender: TObject);
begin
panel:=tpanel.Create(owner);
panel.Color:=255;
panel.Width:=ClientWidth div 2;
panel.Parent:=form1;
panel.Align:=alleft;

panel2:=tpanel.Create(owner);
panel2.Color:=clGreen;
panel2.Parent:=form1;
panel2.Align:=alClient;
end;
Это, конечно только вариант, но я думаю, такой код будет пошустрее, чем каждые раз рисовать через МЕДЛЕННУЮ КАНВУ.
Думаю могут быть вопросы с преобразованием цвета. мой вариант:
red*1+green*256+blue*256*256;
panel2.Color:=200+200*256+200*256*256;получится темно-серая панель
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


а зачем?
смысл создавать панели динамически? мы заранее знаем, где они должны быть, сколько их и т.д.

и правила форума почитай (про теги).


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(Andrei_25 @ 24.06.2007 7:28) *

Ладно, убедили. Если использовать FillRect, то скорость тоже приличная и лишний раз мудрить не надо.

 К началу страницы 
+ Ответить 

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

 





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