Создание окна формы.

Готовые скрипты, модули расширений, динамические библиотеки и вспомогательные утилиты.
Аватара пользователя
SirWolf
Сообщения: 22
Зарегистрирован: 10 фев 2018, 21:24

Создание окна формы.

Сообщение SirWolf » 01 июн 2018, 18:26

Как по мне, удобно для форм отчетов, когда необходимо посмотреть статистику с изменением параметров.
Так же скрывает кнопки по желанию. В личной практике - создаю форму с отчетом, ставлю ее в режим простая форма, и на кнопку навешиваю экшен. Критикуем, дорабатываем. Как вариант можно прилепить к даблклику по таблице и выводить инфу, либо в Fm.OpenRecord(0); запихивать функцию.

Код: Выделить всё

{@action
Id=AC518624-F1AF-4B12-B060-464B7449FDFF
OrigName=SW_OpenNeedForm
Name=Открывает нужную форму в отдельном окне.
Group=Admin
UI=
<ui>
 <form name="Form_name" caption="Выберите Форму"/>
 <checkbox  name="Ok_Button" caption="Показать/Скрыть кнопку OK"/>
 <checkbox  name="Chancel_Button" caption="Показать/Скрыть кнопку Chancel"/>
</ui>
Description=Открывает нужную форму в отдельном окне.
@}

procedure SW_OpenNeedForm(TForm:string;OkBtnChk,ChancelBtnChk:boolean);
 var Fm:TdxForm;
  begin
    if (TForm = '') then exit;
    Fm:=CreateForm(TForm);
    Fm.OpenRecord(0);
    //Fm.Edit;
    Fm.Append;
    if OkBtnChk = false then FM.EditWindow.Buttons.OkButton.Hide;
    if ChancelBtnChk = false then FM.EditWindow.Buttons.CancelButton.Hide;
    Fm.EditWindow.ShowModal;
    if Fm.EditWindow.ModalResult=mrOk then
    begin
            Fm.Post;
            DestroyForm(Fm);
          end
    else
          begin
            Fm.Cancel;
            DestroyForm(Fm);
          end
    end; 

Аватара пользователя
Владимир
Администратор
Сообщения: 587
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Создание окна формы.

Сообщение Владимир » 01 июн 2018, 19:02

Немного подрихтовал, если никто не против...
1. CreateForm недолго жить осталось. Это устаревшая функция (Так же как и DestroyForm).
2. Чуть подкрутил название чекбоксов (пока не воткнул - не понял что именно в каком состоянии должно произойти) :-) .
3. Если нет обеих кнопок - убирается и "подложка" (не очень красиво пустая смотрится).

Код: Выделить всё

{@action
Id=AC518624-F1AF-4B12-B060-464B7449FDFF
OrigName=SW_OpenNeedForm
Name=Открывает нужную форму в отдельном окне.
Group=Admin
UI=
<ui>
 <form name="Form_name" caption="Выберите Форму"/>
 <checkbox  name="Ok_Button" caption="Отображать кнопку [ОК]"/>
 <checkbox  name="Chancel_Button" caption="Отображать кнопку [Отмена]"/>
</ui>
Description=Открывает нужную форму в отдельном окне.
Если форма не указана - открывает экземпляр текущей.
@}

var Old_FmEditWindowOnShow:TNotifyEvent;

procedure New_FmEditWindowOnShow(Sender: TObject);
var Ew:TEditWindow;
begin
  if Old_FmEditWindowOnShow<>nil then Old_FmEditWindowOnShow(Sender);
  Ew := TEditWindow(Sender);
  Ew.Top:=Ew.Top+24;
  Ew.Left:=Ew.Left+24;
  Ew:=nil;
end;

procedure SW_OpenNeedForm(Form:string;OkBtnChk,ChancelBtnChk:integer);
 var Fm:TdxForm;
  begin
    if Form = '' then
    Fm:=TdxForm.Create(Self.FormCaption) else
    Fm:=TdxForm.Create(Form);
    Fm.OpenRecord(0);
    Fm.Append;
    if (OkBtnChk+ChancelBtnChk=0) then
    begin
    FM.EditWindow.Height:=FM.EditWindow.Height-FM.EditWindow.Buttons.Height;
    FM.EditWindow.Buttons.Visible:=false;
    end;
     FM.EditWindow.Buttons.OkButton.Visible := (OkBtnChk=1);
     FM.EditWindow.Buttons.CancelButton.Visible := (ChancelBtnChk=1);
    if (FM.FormCaption=Form) or (Form = '') then
    begin
    Old_FmEditWindowOnShow := FM.EditWindow.OnShow;
    FM.EditWindow.OnShow:= @New_FmEditWindowOnShow;
    end;
    Fm.EditWindow.ShowModal;
    if Fm.EditWindow.ModalResult=mrOk then
      Fm.Post
    else
      Fm.Cancel;
      Fm.Free;
    end;
P. S. А вообще давно хотел заняться связкой в последовательность подобных простых действий. Надо как-нибудь...

Аватара пользователя
SirWolf
Сообщения: 22
Зарегистрирован: 10 фев 2018, 21:24

Re: Создание окна формы.

Сообщение SirWolf » 01 июн 2018, 19:46

Спасибо за допил.

Аватара пользователя
Владимир
Администратор
Сообщения: 587
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Re: Создание окна формы.

Сообщение Владимир » 01 июн 2018, 19:51

Можно дальше раскачать... Есть идейка одна.

Аватара пользователя
Гриша (Гость)

Создание окна формы.

Сообщение Гриша (Гость) » 14 авг 2019, 09:12

Почему xor?

Код: Выделить всё

if not (OkBtnChk xor ChancelBtnChk)
0 xor 0 = 0
1 xor 1 = 0

Аватара пользователя
Владимир
Администратор
Сообщения: 587
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Создание окна формы.

Сообщение Владимир » 14 авг 2019, 10:50

Да, косяк, спасибо, подправил.

upd: Добавил каскадное смещение (если форма текущая):
Изображение

Быстрый ответ

Смайлики
:-) ;-) :-( :-[ :-D :-P O_O :bye: :good: :help: :lol: :ok: :pardon: :sorry: :yes:
Ещё смайлики…
Загрузить изображение
 
   
Ответить