1 (edited by bemorhona-qt 2016-12-20 11:02:09)

Topic: Несколько вопросов

Уважаемый Дмитрий.

1. Как в гриде указать время в виде hh:mm?
2. Как указать время в виде 24 часов, данный момент он стоит 12:00, не могу сделать 13:00 и так далее?
2. Как запретить открытия программы если она уже открыта?
3. Как запретить пользователю изменять ширину колонки в гриде?
4. В версии 3.1 во всех компонентах появились новые свойства. Есть ли мануал?
5. Как указать ширину колонки исходя из содержимого колонки с учетом двух нижеследующих примеров?
Примеры.
- Название шапки колонки Дата прибытия а в строках имеются 12.12.2016
Как видно название шапки колонки больше чем содержимое строки, таким образом ширина колонки должна быть ширине шапки
- Ширина названия шапки меньше ширины содержимого строки
I № I    Имя    I Должность     I
1        Иван     Фрезеровщик
После введения новой записи должна выглядит так
I № I    Имя    I Должность                    I
1        Иван     Фрезеровщик
2        Петр     Столяр-фрезеровщик

Надеюсь смог объяснить.

Re: Несколько вопросов

6. Есть такой скрипт

if Form1.Date.Checked and Form1.Date1.Checked then
   begin 
              if Form1.Date.DateTime < Form1.Date1.DateTime then ShowMessage('Text');
   end;

if Form1.Date.Checked and Form1.Date2.Checked then
   begin 
              if Form1.Date.DateTime > Form1.Date2.DateTime then ShowMessage('Text');
   end;

Моя идея в следующем. Дата в поле Date должна быть: Date1<=Date<=Date2

Теперь проблема:
Пример
В Date стоит дата 20.12.2016
В Date1 стоит дата 20.12.2016
В Date2 стоит дата 20.12.2016
В норме это не удовлетворяет условию запроса, но к сожалению сообщение показывается. В чем может быть проблема?

Re: Несколько вопросов

1. Отформатировать время в гриде можно с помощью выч. поле:

strftime('%H:%M', timefield)

где timefield - это имя поля, в котором содержится время.
Данное выч. поле необходимо вывести в грид вместо поля timefield



2. Если вы воспользуетесь выводом времени как показано в 1. вопросе, то будет 24 часовой формат. В противном случае формат времени в гриде задается региональными настройками Windows. Изменить формат времени в компоненте DateTimePicker можно с помощью его свойства Format, задайте его значение таким: HH:mm


2. Проект с примером: http://myvisualdatabase.com/forum/misc. … download=1


3. Пример, как заблокировать изменять размер первых трех колонок

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.Columns[0].Options := Form1.TableGrid1.Columns[0].Options + coFixedSize;
    Form1.TableGrid1.Columns[1].Options := Form1.TableGrid1.Columns[1].Options + coFixedSize;
    Form1.TableGrid1.Columns[2].Options := Form1.TableGrid1.Columns[2].Options + coFixedSize;
end;

4. К сожалению мануал пока недописал с учетом новых свойств.


5.

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.BestFitColumns(bfBoth);
end;
Dmitry.

Re: Несколько вопросов

6. Необходимо не позволять сохранять запись если данные в компонентах не удовлетворяют данным условиям?

Dmitry.

5 (edited by bemorhona-qt 2016-12-20 15:11:18)

Re: Несколько вопросов

DriveSoft wrote:

6. Необходимо не позволять сохранять запись если данные в компонентах не удовлетворяют данным условиям?

То что вы имеете ввиду я уже сделал. Вот полный скрипт
Form1_Save_OnClick (Sender: string; var Cancel: boolean);
begin
   if Form1.Date.Checked and Form1.Date1.Checked then
      begin 
                 if Form1.Date.DateTime < Form1.Date1.DateTime then ShowMessage('Text');
                 Cancel:= True;
      end;
   if Form1.Date.Checked and Form1.Date2.Checked then
      begin 
                 if Form1.Date.DateTime > Form1.Date2.DateTime then ShowMessage('Text');
                 Cancel:= True;
      end;
end;

Необходимо чтобы Showmessage не заработало если данные в компонентах не удовлетворяют данным условиям.

Пример
В Date стоит дата 20.12.2016
В Date1 стоит дата 20.12.2016
В Date2 стоит дата 20.12.2016

Из примера следует что:

                                    Date        <      Date1
первое условие 20.12.2016 < 20.12.2016 это не верно, значит условие не удовлетворительное, а значит сообщение Text не должно появится, но у меня это сообщение появляется. В чем же проблема?
В приложенном проекте выберите вторую запись и попытайтесь изменить его, у меня не получается.

Post's attachments

Attachment icon Date_test.rar 293.75 kb, 388 downloads since 2016-12-20 

Re: Несколько вопросов

Кстати за ответы других вопросов спасибо вам, попробую их и отпишусь. Вот и еще седьмой вопрос.
7. MessageDlg('Text', mtinformation, mbOk, 0);
Что значит цифра 0 данном диалоге?

Re: Несколько вопросов

Попробуйте так, добавил trunc, который отбрасывает дробную часть переменной в которой содержится дата

procedure Form1_Save_OnClick (Sender: string; var Cancel: boolean);
begin
    if Form1.Date.Checked and Form1.Date1.Checked then
    begin
        if Trunc(Form1.Date.DateTime) < Trunc(Form1.Date1.DateTime) then
        begin
            MessageDlg('Text', mtinformation, mbOk, 0);
            Cancel:= True;
        end;
    end;

    if Form1.Date.Checked and Form1.Date2.Checked then
    begin
        if Trunc(Form1.Date.DateTime) > Trunc(Form1.Date2.DateTime) then
        begin
            MessageDlg('Text', mtinformation, mbOk, 0);
            Cancel:= True;
        end;
    end;
end;
Dmitry.

Re: Несколько вопросов

bemorhona-qt wrote:

Кстати за ответы других вопросов спасибо вам, попробую их и отпишусь. Вот и еще седьмой вопрос.
7. MessageDlg('Text', mtinformation, mbOk, 0);
Что значит цифра 0 данном диалоге?

Это для указания раздела контекстной справки, в диалоге можно показать кнопку Help, при нажатии на которую откроется справка в нужном разделе, но в MVD это не реализовано, поэтому не обращайте внимания.

Dmitry.

Re: Несколько вопросов

DriveSoft wrote:
bemorhona-qt wrote:

Кстати за ответы других вопросов спасибо вам, попробую их и отпишусь. Вот и еще седьмой вопрос.
7. MessageDlg('Text', mtinformation, mbOk, 0);
Что значит цифра 0 данном диалоге?

Это для указания раздела контекстной справки, в диалоге можно показать кнопку Help, при нажатии на которую откроется справка в нужном разделе, но в MVD это не реализовано, поэтому не обращайте внимания.

понятно, а можно ли изменить Caption  у диалогового окна?

Re: Несколько вопросов

bemorhona-qt
Пока нет, в следующей версии можно будет.

Dmitry.

Re: Несколько вопросов

ок. спасибо. супер.