Заголовки модальных окон

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

Заголовки модальных окон

Сообщение Владимир » 09 сен 2019, 16:09

Действие запуска.
Заменяет заголовки модальных окон на новые из указанного списка.


Изображение
Изображение

Примечание:
Статусы записей остаются прежними ("Новая запись", "Редактирование", "Просмотр")
Добавлен статус копирования записи: "Копирование".

Код расширенияПоказать

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

{@module
author=Develop-Soft [ https://forum.develop-soft.ru ]
version=1.1
description=Кастомизация интерфейса
Действия:
1. Заголовки модальных окон.

Изменения:
v 1.0 от 09.09.2019 - выход первой версии
v 1.1 от 09.09.2019 - текст окна устанавливается выражением

...
@}

{@action
Id=95EE2C95-8239-4F88-BFC0-F79E3F239D69
Target=main
OrigName=SetEditWindowCaptions
Name=Заголовки модальных окон
Group=Кастомизация интерфейса
UI=
<ui>
<grid name="names">
 <form name="fm" caption="Форма"/>
 <expr name="name" caption="Заголовок окна" source="fm" required=1/>
</grid>
</ui>
Description=<b>Действие запуска.
Заменяет заголовки модальных окон на новые из указанного списка (устанавливается выражением, вычисляемым в контексте указанной формы).</b><br><br>
<b>Например:</b><br><br>Имя формы = &quot;Счета&quot;, заголовок окна = &quot;Счет&quot;
<br>Имя формы = &quot;Договора&quot;, заголовок окна = &quot;Договор&quot;
<i><br><br><b>Примечание:</b><br><br>
Статусы записей остаются прежними ("Новая запись", "Редактирование", "Просмотр")<br>
Добавлен статус копирования записи: "Копирование".</i>
@}

  type TEWCaption = record
    FormCaption:string;
    NewCaption:string;
    Old_EditWindowOnShow: TNotifyEvent;
    Old_OnAfterDuplicate: TNotifyEvent;
  end;

type TEWCaptionsArray = array of TEWCaption;

var Old_OnCreateForm:  TCreateFormEvent;
  EWCaptionsArray:  TEWCaptionsArray;
  InsertMode:string;
  NewCaption:string;
procedure WOS(Sender: TObject);
var Ew:TEditWindow;
  Fm:TdxForm;
  StateInfo:string;
  i:integer;
begin
  Ew := TEditWindow(Sender);
  Fm := Ew.Form;
  if trim(InsertMode)<>'' then
  begin
    StateInfo := InsertMode;
    InsertMode := '';
  end
  else
  StateInfo := Utf8StringReplace(Ew.Caption,Fm.FormCaption,'',[]);
  if Fm.Params.Paramexists('NewEditWindowCaption') then
  begin
    for i:=0 to length(EWCaptionsArray)-1 do
    if EWCaptionsArray[i].FormCaption = Fm.FormCaption then
    begin
      if EWCaptionsArray[i].Old_EditWindowOnShow<>nil then
      EWCaptionsArray[i].Old_EditWindowOnShow(Ew);
      if EWCaptionsArray[i].Old_OnAfterDuplicate<>nil then
      EWCaptionsArray[i].Old_OnAfterDuplicate(Fm);
    end;
    try
    NewCaption :=   EvalExpr(Fm.Params['NewEditWindowCaption'],Fm);
    except
    NewCaption := '';
    end;
    Ew.Caption :=NewCaption+StateInfo;
    NewCaption:='';
  end;
end;

procedure AfterDuplicate(Sender: TObject);
begin
  InsertMode:=' (Копирование)';
end;

procedure MainWindow_OnCreateForm(Sender: TObject; Form: TdxForm);
var i:integer;
begin
  if Old_OnCreateForm<>nil then Old_OnCreateForm(Sender,Form);
  for i:=0 to length(EWCaptionsArray)-1 do
  begin
    if Form.FormCaption = EWCaptionsArray[i].FormCaption then
    if Form.EditWindow<>nil then
    begin
      Form.Params['NewEditWindowCaption']:=EWCaptionsArray[i].NewCaption;
      EWCaptionsArray[i].Old_EditWindowOnShow:=Form.EditWindow.OnShow;
      Form.EditWindow.OnShow := @WOS;
      EWCaptionsArray[i].Old_OnAfterDuplicate:=Form.OnAfterDuplicate;
      Form.OnAfterDuplicate := @AfterDuplicate;
    end;
  end;
end;

procedure SetEditWindowCaptions(Captions:TVariantArray2d);
var i:integer;
begin
  SetArrayLength(EWCaptionsArray,length(Captions));
  for i:=0 to length(Captions)-1 do
  begin
    EWCaptionsArray[i].FormCaption := Captions[i][0];
    EWCaptionsArray[i].NewCaption := Captions[i][1];
  end;
  Old_OnCreateForm := MainWindow.OnCreateForm;
  MainWindow.OnCreateForm := @MainWindow_OnCreateForm;
end;

Скачать:
Заголовки модальных окон v_1.1.epas
(3.99 КБ) 69 скачиваний

Демо


Поддержка проекта

Теги:

Аватара пользователя
drts
Сообщения: 40
Зарегистрирован: 14 фев 2018, 20:20

Заголовки модальных окон

Сообщение drts » 09 сен 2019, 19:19

Здорово, конечно, но самая суть была - менять заголовки на лету. Чтобы получилось примерно такое: Сводка по изделию [Изделие] от [Дата] г.

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

Заголовки модальных окон

Сообщение Владимир » 09 сен 2019, 21:06

Надо подумать... А насколько "на лету"? Чтобы прям при вводе буквы менялись..?
Или достаточно при редактировании записи (открытии окна) увидеть что-то такое:
Изображение
Если так то с малой кровью, вот, можно запробовать:

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

{@module
author=Develop-Soft [ https://forum.develop-soft.ru ]
version=1.1
description=Кастомизация интерфейса
Действия:
1. Заголовки модальных окон.

Изменения:
v 1.0 от 09.09.2019 - выход первой версии
v 1.1 от 09.09.2019 - текст окна устанавливается выражением

...
@}

{@action
Id=95EE2C95-8239-4F88-BFC0-F79E3F239D69
Target=main
OrigName=SetEditWindowCaptions
Name=Заголовки модальных окон
Group=Кастомизация интерфейса
UI=
<ui>
<grid name="names">
 <form name="fm" caption="Форма"/>
 <expr name="name" caption="Заголовок окна" source="fm" required=1/>
</grid>
</ui>
Description=<b>Действие запуска.
Заменяет заголовки модальных окон на новые из указанного списка (устанавливается выражением, вычисляемым в контексте указанной формы).</b><br><br>
<b>Например:</b><br><br>Имя формы = &quot;Счета&quot;, заголовок окна = &quot;Счет&quot;
<br>Имя формы = &quot;Договора&quot;, заголовок окна = &quot;Договор&quot;
<i><br><br><b>Примечание:</b><br><br>
Статусы записей остаются прежними ("Новая запись", "Редактирование", "Просмотр")<br>
Добавлен статус копирования записи: "Копирование".</i>
@}

  type TEWCaption = record
    FormCaption:string;
    NewCaption:string;
    Old_EditWindowOnShow: TNotifyEvent;
    Old_OnAfterDuplicate: TNotifyEvent;
  end;

type TEWCaptionsArray = array of TEWCaption;

var Old_OnCreateForm:  TCreateFormEvent;
  EWCaptionsArray:  TEWCaptionsArray;
  InsertMode:string;
  NewCaption:string;
procedure WOS(Sender: TObject);
var Ew:TEditWindow;
  Fm:TdxForm;
  StateInfo:string;
  i:integer;
begin
  Ew := TEditWindow(Sender);
  Fm := Ew.Form;
  if trim(InsertMode)<>'' then
  begin
    StateInfo := InsertMode;
    InsertMode := '';
  end
  else
  StateInfo := Utf8StringReplace(Ew.Caption,Fm.FormCaption,'',[]);
  if Fm.Params.Paramexists('NewEditWindowCaption') then
  begin
    for i:=0 to length(EWCaptionsArray)-1 do
    if EWCaptionsArray[i].FormCaption = Fm.FormCaption then
    begin
      if EWCaptionsArray[i].Old_EditWindowOnShow<>nil then
      EWCaptionsArray[i].Old_EditWindowOnShow(Ew);
      if EWCaptionsArray[i].Old_OnAfterDuplicate<>nil then
      EWCaptionsArray[i].Old_OnAfterDuplicate(Fm);
    end;
    try
    NewCaption :=   EvalExpr(Fm.Params['NewEditWindowCaption'],Fm);
    except
    NewCaption := '';
    end;
    Ew.Caption :=NewCaption+StateInfo;
    NewCaption:='';
  end;
end;

procedure AfterDuplicate(Sender: TObject);
begin
  InsertMode:=' (Копирование)';
end;

procedure MainWindow_OnCreateForm(Sender: TObject; Form: TdxForm);
var i:integer;
begin
  if Old_OnCreateForm<>nil then Old_OnCreateForm(Sender,Form);
  for i:=0 to length(EWCaptionsArray)-1 do
  begin
    if Form.FormCaption = EWCaptionsArray[i].FormCaption then
    if Form.EditWindow<>nil then
    begin
      Form.Params['NewEditWindowCaption']:=EWCaptionsArray[i].NewCaption;
      EWCaptionsArray[i].Old_EditWindowOnShow:=Form.EditWindow.OnShow;
      Form.EditWindow.OnShow := @WOS;
      EWCaptionsArray[i].Old_OnAfterDuplicate:=Form.OnAfterDuplicate;
      Form.OnAfterDuplicate := @AfterDuplicate;
    end;
  end;
end;

procedure SetEditWindowCaptions(Captions:TVariantArray2d);
var i:integer;
begin
  SetArrayLength(EWCaptionsArray,length(Captions));
  for i:=0 to length(Captions)-1 do
  begin
    EWCaptionsArray[i].FormCaption := Captions[i][0];
    EWCaptionsArray[i].NewCaption := Captions[i][1];
  end;
  Old_OnCreateForm := MainWindow.OnCreateForm;
  MainWindow.OnCreateForm := @MainWindow_OnCreateForm;
end;

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

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