У немодального дизайнера те же проблемы

отредактировано 19:42 Раздел: FastReport 3.0
Если в приложении дизайнер отчетов открывается кнопкой на форме, которая открыта модально, то окно инспектора ведет себя так же как если бы дизайнер в коде модуля FRXClass вызывался методом ShowModal:
окно инспектора закрывает окно редактора SQL и т.д.

В частности, это наблюдается если Preview - модальный и пользователь нажимает кнопку "Редактировать отчет".

Хорошо бы решить эту проблему. Может быть не очень трудно сделать как в версии 2.53? FastReport - действительно лучший генератор отчетов для Delphi, но из-за таких недоработок я не могу им пользоваться.

Сергей Ковязин.

Комментарии

  • отредактировано 19:42
    В версии 2.х было проще - не было окон, которым можно делать dock.
  • отредактировано 19:42
    А нельзя пожертвовать Dock-ом?
    Модальность формы, из которой открывается дизайнер критически важна по логике задачи.
  • отредактировано 19:42
    Да я б лучше пожертвовал возможностью делать таким окнам undock. Ведь в таком режиме все работает и никто никого не заслоняет.
  • отредактировано 19:42
    А как это сделать? (Как принудительно установить режим, при котором все эти окна docked, и чтобы пользователь не мог это изменить?)
  • отредактировано March 2005
    Я для себя нашел решение: форма, на которой сидит кнопка вызова дизайнера, открывается не модально, а "псевдомодально". Код подобен тому, которым открывается сам дизайнер в модуле FRXClass.

    Вот процедура (может кому пригодится):

    // Создание формы заданного типа и отображение ее псевдомодально
    procedure ShowFormAsPseudoModal(FormClass: TFormClass);
    type TFormList = Record
    Form:TForm;
    DoDisable:boolean;
    end;
    var i, L:integer; F:TForm; FormList:array of TFormList;
    begin
    // запоминаем активную форму
    F:=Screen.ActiveForm;
    // Создаем массив ссылок на открытые формы на экране
    // и запоминаем, какие из них сделаны disabled
    L:=Screen.FormCount;
    SetLength(FormList, L);
    for I:= 0 to L-1 do
    begin
    FormList.Form:=Screen.Forms;
    FormList.DoDisable:=(FormList.Form.Visible and FormList.Form.Enabled);
    if FormList.DoDisable then FormList.Form.Enabled:=false;
    end;
    // Создаем новую форму
    try
    with FormClass.Create(Application) do
    begin
    try
    if FormStyle<>fsNormal then FormStyle:=fsNormal;
    if visible then Hide;
    Show;
    while Visible do Application.HandleMessage;
    finally
    try
    Free;
    except
    end;
    end;
    end;
    finally
    // Делаем Enabled формы сделанные Disabled
    for I:= 0 to L-1 do
    if ((FormList.Form <> nil) and FormList.DoDisable)
    then FormList.Form.Enabled:=true;
    if F <> nil then
    begin
    if not F.Enabled then F.Enabled:=true;
    if (F.Visible and not F.Focused) then F.SetFocus;
    end;
    end;
    // освобождаем память
    FormList:=nil;
    end;

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.