![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Combobox и MonthCalendar [D7, XP]
Sw © (2009-05-22 07:37:00)Создаю программно несколько combobox, в одном из combobox'сов необходимо выбирать дату, но в моем случае неудобно использовать TDateTimePicker. Делаю так:
procedure TForm1.FormCreate(Sender: TObject);
begin
MonthCalendar1.Visible:=false;
ComboBox1.Items.Add(DateToStr(Date));
ComboBox1.ItemIndex:=0;
end;
procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
MonthCalendar1.Visible:=true;
end;
procedure TForm1.MonthCalendar1Click(Sender: TObject);
begin
ComboBox1.Clear;
ComboBox1.Items.add(datetostr(MonthCalendar1.date));
ComboBox1.ItemIndex:=0;
MonthCalendar1.Visible:=false;
end;
Проблема в том, что при нажатии на кнопку выбора в Combobox'се открывается список, т.е. одна строчка списка с текущей датой. Мне нужно, чтобы эта строчка не появлялась, а фокус был на календаре.
И еще один ньюанс: в TDateTimePicker реализовано так, что если кликнули по форме - календарь закрылся, допустим...
procedure TForm1.FormClick(Sender: TObject);
begin
MonthCalendar1.Visible:=false;
end;
вот только у меня куча панелей, выходит им всем на Click этот код прописывать?
Помогите, пожалуйста.
Smile (2009-05-22 19:52:00) [1]Сатарался внимателно прочитать ветку. Но так и не понял для чего нужен ComboBox с единственной строкой (Item) Date из Now?
feel (2009-05-22 19:39:00) [2]Я для дат использую компонент из библиотеки EhLib, помоему очень удобно и если я правильно понял это то что тебе надо.
Sw (2009-05-22 10:24:00) [3]Спасибо большое. Мне очень нужно мнение специалистов, т.к. действительно не знаю правильной дорогой иду или сбиваюсь. Лучше буду создавать DateTimePicker.
И. Павел (2009-05-22 09:47:00) [4]
> попробуй теперь например сменить дату(месяц) в MonthCalendar1
Забыл добавить:and (Msg.hwnd<>MonthCalendar1.Handle)
Хотя, по моему тоже, такие сложности только для укорачивания кода ни к чему.
{RASkov} (2009-05-22 09:31:00) [5]> [8] И. Павел (22.05.09 09:22)
> if DateTimePicker1<>nil then
> DateTimePicker1.Visible:=false;
там наверное должно быть MonthCalendar1...
Но...попробуй теперь например сменить дату(месяц) в MonthCalendar1 :)
можно и это победить, но...
> полностью устраивает... код длинее из-за него получается
т.е. не нужно много кода автору :)
И. Павел (2009-05-22 09:22:00) [6]
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.Message=WM_LButtonDown then
Begin
if DateTimePicker1<>nil then
DateTimePicker1.Visible:=false;
end;
end;
Если список не нужен, может проще заменить его на Edit с кнопкой.
{RASkov} (2009-05-22 09:09:00) [7]> [4] Sw (22.05.09 09:02)
> Если не затруднит приведите код, пожалуйста.
помоему ты сошел с правильной дороги и "неправильный" код не особо хочется давать :)
Sw (2009-05-22 09:09:00) [8]походит, он полностью устраивает... код длинее из-за него получается
{RASkov} (2009-05-22 09:04:00) [9]> [3] Sw (22.05.09 08:57)
> при ComboboxCloseUp создаю label'ы и combobox'ы в цикле
> при повторном ComboboxCloseUp уничтожаю и создаю заново....
Это все понятно, но чем Пикер-то не подошел?
Sw (2009-05-22 09:02:00) [10]> [1]Спасибо, помогли новичку :( Если не затруднит приведите код, пожалуйста.
Sw (2009-05-22 08:57:00) [11]> [2]
при ComboboxCloseUp создаю label'ы и combobox'ы в цикле
при повторном ComboboxCloseUp уничтожаю и создаю заново....ну свои заморочки...каждый раз разное кол-во и могут быть разные св-ва и обработчики события.....вот.....и все красиво...для соmbobox....просто добавлять другой компонент неохота.....вот все combobox получаются как люди...а энтот ...не такой :( ну и думаю...пусть будет combobox и привязать к нему календарь
{RASkov} (2009-05-22 08:39:00) [12]> [0] Sw (22.05.09 07:37)
> в моем случае неудобно использовать TDateTimePicker
Можно поинтересоваться - чем?
И. Павел (2009-05-22 08:14:00) [13]
> вот только у меня куча панелей, выходит им всем на Click
> этот код прописывать
Можно отлавливать не события а сообщения Windows (через TApplicationEvents), например.