Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMonthCalendar, OnClick 
:(
    Опции темы
Akella
Дата 31.1.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



 Как определить "по-уму", так сказать, что пользователь ткнул мышкой именно по дате, а то при переключении месяца, тоже выбирается дата.

Код

procedure TfmDate.MonthCalendar1Click(Sender: TObject);
begin
  Edit1.Text:=Edit1.Text + IntToStr(DateUtils.DayOf(MonthCalendar1.Date)) +';';
end;


Это сообщение отредактировал(а) Akella - 17.6.2013, 16:44
PM MAIL   Вверх
Druidik25
Дата 31.1.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 27.1.2005
Где: Киев, Украина

Репутация: нет
Всего: нет



Меняется дата, но не меняется месяц. Сохрани в глобальной переменной дату, и если она изменилась - держи результат. Осталось проверять при изменении даты - поменялось число или месяц.
Можно дату разделить на месяц год и число и таким же "методом".
PM MAIL ICQ   Вверх
Akella
Дата 31.1.2005, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Мне кажется, что это не выход.
Попробуем smile
Добавлено @ 16:36
Смотрим, что получается на рисуночке smile
1. Щелкаем по дате 31 янв.
2. Ниже в TEdit попадает значание 31;
3. Щелкаем по кнопке переключения месяца.
4. Ниже в TEdit попадает значание 31;28;
Такого быть не должно, нужно просто переключить месяц.

Код

dDate - глобальная переменная
procedure TfmDate.MonthCalendar1Click(Sender: TObject);
begin
 if MonthCalendar1.Date = dDate then Exit;
 Edit1.Text:=Edit1.Text + IntToStr(DateUtils.DayOf(MonthCalendar1.Date)) +';';
end;


PM MAIL   Вверх
Akella
Дата 31.1.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



А если переключать месцы туда-обратно, то все время будет 28



Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  1.JPG
PM MAIL   Вверх
z-END
Дата 31.1.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



может немного усложнить и сделать по нормальному?:
создать массив дат, (отображать его в TListBox подобном слева(справа) от твоего календаря).
при добавлении новой даты добавлять его в массив и в список, при отмене - удалять..
усложнится все не намного зато удобства будутsmile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
NiJazz
Дата 31.1.2005, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



dsergey
А что хотелось бы при переключении месяца?
PM MAIL   Вверх
Druidik25
Дата 31.1.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 27.1.2005
Где: Киев, Украина

Репутация: нет
Всего: нет



Можно сохранить таблицу максимальных дат месяцев и если дата стала максимальной, а была большей чем эта но в другом месяце, то её не ставить. Это как вариант, хотя могут терятся числа. Хотя если они должны выбираться из одного месяца - это должно помочь. Но если выбирать все наибольшие подряд - то не сработает.
Если из меесяца берется число хотя бы одно из меньших - то всё супер.

Это сообщение отредактировал(а) Druidik25 - 31.1.2005, 16:58
PM MAIL ICQ   Вверх
<Spawn>
Дата 31.1.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Цитата
добавлять его в массив и в список


Зачем добавлять в массив и в список, если достаточно одного списка? Метод IndexOf поможет найти существующие элементы.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 31.1.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(NiJazz @ 31.1.2005, 16:53)
dsergey
А что хотелось бы при переключении месяца?

Только "смена картинки", в TEdit ничего попадать не должно

т.е. пользователь выбирает пару дней, переключает ся на другой месяц и продолжает выбирать дни, неужели так сложно.
PM MAIL   Вверх
Druidik25
Дата 31.1.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 27.1.2005
Где: Киев, Украина

Репутация: нет
Всего: нет



Если он выбирает с интервалом до полмесяца - тогда мой вариант - работает...
Запоминать надо день и месяц.

На крайний случай нарисовать свой календарь, но гемора много. А перехватывать нажатие кнопки в компоненте не умею.

Это сообщение отредактировал(а) Druidik25 - 31.1.2005, 17:04
PM MAIL ICQ   Вверх
<Spawn>
Дата 31.1.2005, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Код

procedure TForm1.MonthCalendar1Click(Sender: TObject);
var
 Day: Integer;
begin
 Day := DayOf(MonthCalendar1.Date);
 if Day <> DayOf(dDate) then
 begin
   Edit1.Text:=Edit1.Text + IntToStr(Day)+';';
   dDate := MonthCalendar1.Date; //Это я для проверки поставил сюда:)
 end;
end;


Это сообщение отредактировал(а) <Spawn> - 31.1.2005, 17:11


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 31.1.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



<Spawn>, криво работает.
нормально работает, если переключаться второй раз и более.
PM MAIL   Вверх
z-END
Дата 31.1.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Вот код: при двойномкличе на дате, она выделяется и заносится в список дат, при повторном клике она удаляется оттуда...
Код

procedure TForm1.MonthCalendar1DblClick(Sender: TObject);
Var
Idx:Integer;
begin
Idx := Dates.IndexOf (DateToStr (MonthCalendar1.Date));
if Idx>-1
then Dates.Delete (IDx)
else Dates.Add (DateToStr (MonthCalendar1.Date));
MonthCalendar1.Date := IncMonth (MonthCalendar1.Date);
MonthCalendar1.Date := IncMonth (MonthCalendar1.Date,-1);
end;

procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
 Month: Cardinal; var MonthBoldInfo: Cardinal);
var
x: Integer;
Cdate: TDate;
BDates: array of Cardinal;
begin
if Dates = nil then
begin
 Dates := TStringList.Create;
 Dates.Sorted := True;
 Dates.Duplicates := dupIgnore;
end;
for x := 0 to Dates.Count - 1 do
begin
CDate := StrToDate( Dates [x]);
if MonthOf(CDate)=Month then
begin
 SetLength (BDates, Length(BDates) + 1);
 BDates[ length(BDates)-1] := DayOf(CDate);
end;
end;
if Length (BDates) > 0 then MonthCalendar1.BoldDays (BDates, MonthBoldInfo);
Setlength(BDates,0);
end;

По-моему решение для твоих нескольких тем сразу=)


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
<Spawn>
Дата 31.1.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Тогда вот так:

Код

var
 Form1: TForm1;
 LastMonth: integer;

implementation

{$R *.dfm}

procedure TForm1.MonthCalendar1Click(Sender: TObject);
var
 Month: Integer;
begin
 Month := MonthOf(MonthCalendar1.Date);
 if Month = LastMonth then
   Edit1.Text:=Edit1.Text + IntToStr(DayOf(MonthCalendar1.Date)) + ';'
 else
   LastMonth := Month;
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Akella
Дата 31.1.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Общим решением собрания принят код, любезно предоставленный <Spawn`ом>, т.к. компактный и понятный. Всем спасибо. Тебе плюсик, <Spawn>
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.