Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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), например.


Наверх

Титульная страница Поиск, карта сайта Написать письмо