1 (edited by agatlogic101 2019-01-27 21:35:05)

Topic: даты в календаре (NEW)

Доброе время суток, help pls. Нужно что бы все даты в таблице, которые были занесены, подсвечивались в календаре. Каким образом это реально сделать? Буду очень благодарен, заранее спасибо.

Post's attachments

Attachment icon Screenshot_1.png 63.12 kb, 303 downloads since 2018-11-13 

Re: даты в календаре (NEW)

Приветствую.


Скачайте пожалуйста последнюю бета версию, добавил такую возможнсть
https://www.dropbox.com/s/xhks7c4n6g8m0 … a.zip?dl=0


Пример:

procedure Form1_TableGrid1_OnChange (Sender: TObject);
begin
    Form1.MonthCalendar1.Visible := False;
    Form1.MonthCalendar1.Date:=Form1.MonthCalendar1.Date - 365;
    Form1.MonthCalendar1.Date:=Form1.MonthCalendar1.Date + 365;
    Form1.MonthCalendar1.Visible := True;
end;

procedure Form1_MonthCalendar1_OnGetMonthBoldInfo (Sender: TObject; Month, Year: Cardinal; var MonthBoldInfo: Cardinal);
var
    AStr: array of string;
    AByte: Array of byte;
    sMonth, s: string;
    i, c: integer;
begin
    sMonth := IntToStr(Month);
    if Length(sMonth)=1 then sMonth := '0' + sMonth;

    s := SQLExecute( 'SELECT group_concat(strftime(''%d'', "DateField"), ",") FROM booking WHERE strftime(''%m.%Y'', "DateField")="'+sMonth+'.'+IntToStr(Year)+'"' );  //

    if s <> '' then
    begin
            AStr := SplitString(s, ',');
            SetLength(AByte, Length(AStr));
        
            c := Length(AByte)-1;
            for i := 0 to c do
                if ValidInt(AStr[i]) then AByte[i] := StrToInt(AStr[i]) else AByte[i] := 0;

            TdbMonthCalendar(Sender).BoldDays(AByte, MonthBoldInfo);
    end;
end;


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

Post's attachments

Attachment icon Calendar bold dates.zip 6.76 kb, 409 downloads since 2018-11-13 

Dmitry.

Re: даты в календаре (NEW)

Dmitry, спасибо за быстрый отзыв. Сделал как вы сказали, скачал последнюю бету версию, и пример. Открыл пример с её помощью, запустил и ничего не увидел. ("будут выделеным жирным шрифтом") Все цифры остались одинаковые.https://d.radikal.ru/d19/1811/a8/bc36320cce42.jpg

Re: даты в календаре (NEW)

Извинюсь, видимо забыл обновить версию, скачайте пожалуйста программу еще раз и пример тоже.

Dmitry.

5 (edited by agatlogic101 2018-11-15 07:08:36)

Re: даты в календаре (NEW)

Dmitry, отлично, заработало. Спасибо! Скажите пожалуйста, стоит ли ожидать изменения цвета у этих дат в дальнейших версиях? (то есть не просто жирным курсивом а красным цветом) Это бы существенно усилило программу для использования её как планировщика.

Re: даты в календаре (NEW)

К сожалению у данного компонента нет возможности выделить более заметно.
Посмотрите пожалуйста данный пример планировщика
http://myvisualdatabase.com/forum/misc. … download=1

Dmitry.

Re: даты в календаре (NEW)

Жаль... А есть хотя бы возможность что бы календарь всегда начинал показывать к примеру с 1 мая 2017 года, а не сегоднешней датой?

Re: даты в календаре (NEW)

agatlogic101 wrote:

Жаль... А есть хотя бы возможность что бы календарь всегда начинал показывать к примеру с 1 мая 2017 года, а не сегоднешней датой?

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
    Form1.MonthCalendar1.Date := EncodeDate(2018, 05, 1);
end;
Dmitry.

Re: даты в календаре (NEW)

Доброе время суток, а какие нужно исправления в скрипте сделать, что бы он работал для MySQL? Просто я так понимаю строка
s := SQLExecute( 'SELECT group_concat(strftime(''%d'', "DateField"), ",") FROM booking WHERE strftime(''%m.%Y'', "DateField")="'+sMonth+'.'+IntToStr(Year)+'"' );  //
явно для SQLite, и после перехода на MySQL теперь не работает. Заранее спасибо

Re: даты в календаре (NEW)

agatlogic101 wrote:

Доброе время суток, а какие нужно исправления в скрипте сделать, что бы он работал для MySQL? Просто я так понимаю строка
s := SQLExecute( 'SELECT group_concat(strftime(''%d'', "DateField"), ",") FROM booking WHERE strftime(''%m.%Y'', "DateField")="'+sMonth+'.'+IntToStr(Year)+'"' );  //
явно для SQLite, и после перехода на MySQL теперь не работает. Заранее спасибо

Для MySQL

s := SQLExecute( 'SELECT CONCAT_WS(",", DATE_FORMAT(`DateField`, "%e")) FROM booking WHERE DATE_FORMAT(`DateField`, "%m.%Y")="'+sMonth+'.'+IntToStr(Year)+'"' );
Dmitry.

Re: даты в календаре (NEW)

Для MySQL

s := SQLExecute( 'SELECT CONCAT_WS(",", DATE_FORMAT(`DateField`, "%e")) FROM booking WHERE DATE_FORMAT(`DateField`, "%m.%Y")="'+sMonth+'.'+IntToStr(Year)+'"' );

Поменял код, он заработал, но с какой то ошибкой. Показывает только 1 дату в месяце. Если её удалить, рамдомно будет показываться другая дата в этом месяце, но опять же одна. На (Рис1) как работал код на SQLite, на (Рис2) как он теперь выглядит на MySQL

https://c.radikal.ru/c08/1901/7c/ae9dd63e92bd.jpg

Re: даты в календаре (NEW)

Переделал немного проект для MySQL

Post's attachments

Attachment icon Calendar bold dates - MySQL.zip 6.95 kb, 370 downloads since 2019-01-31 

Dmitry.

Re: даты в календаре (NEW)

DriveSoft wrote:

Переделал немного проект для MySQL

А можно изменить цвет выделяемого цвета с черного например на красный ?

Re: даты в календаре (NEW)

senseyesenseye1983 wrote:
DriveSoft wrote:

Переделал немного проект для MySQL

А можно изменить цвет выделяемого цвета с черного например на красный ?

Можно создать свой календарь с любыми цветами:

https://1.bp.blogspot.com/-lcuwODRjxlg/YUH32J987_I/AAAAAAAAIZk/ZGqW9yE0_Lociwd_TWek-ErDzt5lHUpHwCLcBGAsYHQ/w640-h482/%25D0%25B8%25D0%25B7%25D0%25BE%25D0%25B1%25D1%2580%25D0%25B0%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25B8%25D0%25B5_2021-09-15_164041.png

https://createmyvisualdatabaseapp.blogs … /ui-4.html

Визуальное программирование: блог и телеграм-канал.