Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Заголовок окна (состояние записи)

Все о том как сделать что-то с помощью скриптов.
Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Поблагодарили: 4 раза
Контактная информация:

Заголовок окна (состояние записи)

Сообщение YurAnt » Чт янв 11, 2018 12:52 pm

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

procedure NewRecord(Sender:TObject);
begin
// dxLabel№.Caption:=Self.FormCaption;
dxLabel№.Caption:=Self.EditWindow.Caption;
end;

procedure Form_Create;
begin
//Self.EditWindow.OnShow:=@NewRecord;
//Self.OnBeforeInsert:=@NewRecord;
//Self.EditWindow.OnPaint:=@NewRecord;
Self.OnAfterInsert:=@NewRecord;
end;

Процедура в любом из случаев упорно выдает: Имя формы (Просмотр). Куда девается ... (Новая запись) ?

Аватара пользователя
admin
Разработчик
Сообщения: 4515
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 19 раз
Поблагодарили: 72 раза

Re: Заголовок окна (состояние записи)

Сообщение admin » Чт янв 11, 2018 1:11 pm

Менять заголовок окна нужно сразу в нескольких событиях: OnAfterScroll, OnAfterEdit, OnAfterPost, OnAfterCancel. OnAfterInsert в этот список не входит, потому что при вставке срабатывает еще и OnAfterScroll. А заголовок окна такой, потому что не наступило еще событие, которое его меняет, т. е. оно содержит старое значение, предыдущее состояние.

drts
Опытный
Сообщения: 349
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск
Благодарил (а): 17 раз
Поблагодарили: 3 раза

Заголовок окна (состояние записи)

Сообщение drts » Пн авг 05, 2019 5:43 pm

Прошу подсказки: почему нежизнеспособна следующая конструкция?

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

{@module
Author=
Version=0.1
Description=
@}
{@action
Id=A00A410F-62A2-481F-B6F1-5B38F1497734
target=form
OrigName=ZAGOLOVOK_OKNA
Name=Заголовок окна
Group=Свойства формы
UI=<ui>
  <divider caption="Текст заголовка" />

  <expr name="_expr" caption="(И/ИЛИ) выражение:">
</ui>
Description=
@}

//==============================================================================
var str:string;
    ne:TNotifyEvent;

procedure ZAGOLOVOK_OKNA_(Sender: TObject);
begin
debug('==================================');
debug(str);
ne(Sender);

if Self.EditWindow <> nil
then
    Self.Caption := str
end;

procedure ZAGOLOVOK_OKNA(st:string);
begin
try
   str:=VarToStr(EvalExpr(str,Self));
   except
     //если это не выражение - оставляем строку
   end;
debug (str);
if str<>'' then  begin
str:=st;
ne:=self.EditWindow.OnActivate;//OnShow ...
self.EditWindow.OnActivate:=@ZAGOLOVOK_OKNA_
end;
end;

И как с этим бороться?

Аватара пользователя
admin
Разработчик
Сообщения: 4515
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 19 раз
Поблагодарили: 72 раза

Заголовок окна (состояние записи)

Сообщение admin » Пн авг 05, 2019 6:12 pm

Здесь меняйте закладок- Tdxform.onstatechange.

drts
Опытный
Сообщения: 349
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск
Благодарил (а): 17 раз
Поблагодарили: 3 раза

Заголовок окна (состояние записи)

Сообщение drts » Пн авг 05, 2019 9:57 pm

admin писал(а):Здесь меняйте закладок- Tdxform.onstatechange.

Обработчик, я так понял. Он есть только у формы, у editwindow его нет. Но что-то не работает всё равно.

Аватара пользователя
Develop-Soft
Сообщения: 709
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 35 раз
Поблагодарили: 162 раза
Контактная информация:

Заголовок окна (состояние записи)

Сообщение Develop-Soft » Пн авг 05, 2019 11:33 pm

А заголовок надо именно у editwindow менять? Или у MainWindow тоже?
Покажь, чё наваял...

drts
Опытный
Сообщения: 349
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск
Благодарил (а): 17 раз
Поблагодарили: 3 раза

Заголовок окна (состояние записи)

Сообщение drts » Вт авг 06, 2019 12:02 am

Помнишь была функция для заголовка окна. Еще времен kroks-a ))) у меня до сих пор работает. Ну я и хотел было перевести в действия. А что-то с разбегу никак. Что наваял- в первом моем посте. Ну и с разными обработчиками поигрался. Так оно мне даже выражение вычислять не хочет(((.

Аватара пользователя
Develop-Soft
Сообщения: 709
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 35 раз
Поблагодарили: 162 раза
Контактная информация:

Заголовок окна (состояние записи)

Сообщение Develop-Soft » Вт авг 06, 2019 12:13 am

Ну так admin подсказал же ж. TdxForm.OnStateChange - то самое событие в котором можно присвоить заголовок окна (то бишь после него нет событий, влияющих на заголовок). То есть - его ставить вместо EditWindow.OnShow(OnActivate) и читать TdxForm.State. Если dsInsert - тогда TdxForm.EditWindow.Caption := TdxForm.FormCaption + ' - Новая', если dsEdit - соответственно " - Редактирование".
Вот только если надо динамически формировать в реальном времени - надо уже смотреть на TdxForm.OnFieldChange либо Что-то.OnExit или Что-то.OnChange...
Короче надо определиться - когда и в каких случаях требуется менять заголовок...