Перейти к содержанию
Fire Monkey от А до Я

Antonyan

Пользователи
  • Постов

    68
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные Antonyan

  1. У вас в начале кода так и написано: Создаю VCL проект, кидаю на форму. Простите за ламмерство или вы меня совсем запутали. Каким образом вы вызываете  fastreport из dll? То есть вы не используете специально написанный fastreport FMX? Или я чего-то не догоняю?

     

    Добрый вечер!

     

    Попробую пояснить. Переписываю свой старый проект под Win7, 8, 10 по просьбе заказчика. После раздумий - решил писать под Win на FMX. FastReport в XE7 представлен только для VCL, под FMX он отсутствует (могу ошибаться, но где то попадалось, что под FMX он существует в виде отдельного платного пакета, хотя в сети есть и ломаные. Ни то, ни другое меня не устраивает). Поэтому, для формирования отчета создал Dll, из которой успешно вызываю FR. В принципе, свой вопрос я решил, но не так как мне бы хотелось. Интересно разобраться, где и что я упустил.

  2. Добрый день, коллеги !

     

    Неожиданно столкнулся с проблемой при использовании FastReport5 в XE7.

     

    Суть :

    Создаю отчет test.fr3, в котором в одно единственное поле из БД выводится информация об адресе. 

    Создаю VCL проект, кидаю на форму :

     

    FDConnection1,

    Temp: TFDQuery,

    FDGUIxWaitCursor1

     

    Далее, коннект к базе FB.

    Под кнопкой пишу код:

     

    procedure TForm3.Button2Click(Sender: TObject);
    var
       frxReport1          : TfrxReport;
       frxDBDataset1    : TfrxDBDataset;
    begin

      frxReport1:=TfrxReport.Create(nil);
      frxDBDataset1:=TfrxDBDataset.Create(nil);
      frxDBDataset1.UserName:='Rekv';
      frxDBDataset1.DataSet:=Temp;

     

    { // В VCL - работает без этих строк, в DLL - разумеется, нет.
      frxReport1.DataSets.Clear;
      frxReport1.DataSets.Add(frxDBDataset1);
      frxReport1.DataSet:=frxDBDataset1;
      frxReport1.DataSetName:=frxDBDataset1.UserName;
    }


          frxReport1.LoadFromFile('e:\test.fr3');
       

          frxReport1.ShowReport(True);

     

    end;

     

    Этот код работает прекрасно, отчет формируется, информация из БД присутствует в отчете. Вопросов к нему нет.

    Проблемы начинаются, когда я пытаюсь использовать формирование и вызов отчета из DLL

     

    Вызов : PrintData(MyQuery);

     

    function PrintData(Temp: TFDQuery): Integer; stdcall;
    var
       frxReport1        : TfrxReport;
       frxDBDataset1  : TfrxDBDataset;

    begin

     

      Result := 0;

      frxReport1:=TfrxReport.Create(nil);
      frxDBDataset1:=TfrxDBDataset.Create(nil);


      frxDBDataset1.UserName:='Rekv';
      frxDBDataset1.DataSet:=Temp;


      frxReport1.DataSets.Clear;
      frxReport1.DataSets.Add(frxDBDataset1);
      frxReport1.DataSet:=frxDBDataset1;

      frxReport1.DataSetName:=frxDBDataset1.UserName;

      frxReport1.LoadFromFile('e:\test.fr3');

      frxReport1.ShowReport(True);

     

    end;
     

     

    В итоге, отчет формируется и запускается, информация из БД присутствует в отчете, но возникает сообщение об ошибке :

     

    Были обнаружены следующие ошибки :  Memo1 : Поле не найдено : Rekv."Adress"

     

    Как победить эту ошибку ?

  3. Вызов конкретного топика (может кому пригодится) :

     

    ShellExecute(0, Pchar('open'),Pchar('hh.exe'),PChar(' -mapid 5 '+Extractfilepath(paramstr(0))+ 'ваш.chm'),nil,9);

     

    где, -mapid 5, команда, указывающая на вызов топика №5.

     

    Не забудьте добавить модуль ShellApi в uses

     

    С уважением.

  4.  

     

    Большое спасибо, помогло.

     

    А мне что - то не помогло :( . Не поделитесь кодом для понимания ?

     

    при определении размера компонента делайте примерно так.

    tmpComponent.Width := Round(tmpComponent.Width * 0.2435); 

    Обратите внимание на Align компонента. Т.к. если будет TAlignLayout.Top, то округление компонента не поможет, нужно округлять ширину его Parent.

    Возможно всё это костыльно, но мне помогает.

     

     

     

    Спасибо, попробую, отпишусь. 0.2435 - число на глаз ?

  5. EnumDisplayDevice - кол-во мониторов

    EnumDisplaySettingsEx - для перечисления списка видео-режимов 

    ChangeDisplaySettingsEx - для каждого полученного режима с флагом тестирования для проверки совместимости.

     

    примеры в поисковике или в msdn

     

    Благодарю. Тоже склоняюсь в эту сторону

  6. вопрос был 

     

     

    А если режим 1024х768 ?

    по ссылке описание режимов

    я так понял Вам для виндовс, так писать надо систему, платформу, хотя на мобильных устройствах может быть несколько экранов тоже 

    Под винду есть в VCL Screen.Monitors[0].Handle, по хэндлу с помощью winAPI можно определить все о мониторе.

    Я имел ввиду, что соотношение сторон указанного разрешения, не позволяет судить о том, широкоформатный монитор или нет

  7. я бы все-таки ушел от темы "а вдруг на мониторе FullHD выставлено разрешение 800*600"

    сколько выставили, столько и монитор...

    в XE7 мне пришлось через WinApi собирать инфу о мониторах, тогда в FMX еще не было аналога VCL Screen

     

    Я попробую иначе изложить свой вопрос. Возможно, я ошибаюсь с подходом, и, быть может, коллеги по цеху, предложат иной.

     

    Ноги проблемы растут от ScaledLayout, который не учитивает aspect ratio при масшатбировании в меньшую сторону от параметров OriginWidth / OriginHeight (при масштабировании в сторону большего разрешения проблем не наблюдается). К сожалению, в моем случае режимы 800х600 и 1024х786 - вполне реальны. ПО пишется (рестайлинг) под конкретного заказчика, а там не парк, а зоопарк. Получается, если монитор широкоформатный и выбратно разрешение 1024х768 ( в дизайн-тайм OriginWidth / OriginHeight - 1366x768 ), все компоненты внутри ScaledLayout масшатибируются и отображаются вполне пропорционально, однако, если монитор "старый и квадратный", имею сплющивание по горизонтали. Разумеется, есть масса вариантов, как этого избежать, но для этого мне нужно знать, широкоформатный монитор или нет.

  8. вопрос был 

     

     

    А если режим 1024х768 ?

    по ссылке описание режимов

    я так понял Вам для виндовс, так писать надо систему, платформу, хотя на мобильных устройствах может быть несколько экранов тоже 

    Под винду есть в VCL Screen.Monitors[0].Handle, по хэндлу с помощью winAPI можно определить все о мониторе.

     

    Пишу под винду на FMX. Буду признателен за конкретный пример.

  9. В указанной вами теме как раз решение проблемы. FMX.SearchBox.pas скопировать к себе в проект не забыли? А лучше установите 10ую версию студии.

    Вы имеете ввиду, физически скопировать этот файл в папку со своим проектом?

  10. Приветствую !

     

    Проблема в следующем. Не корректно работает поиск, несмотря на сделанные изменения см. http://fire-monkey.ru/topic/781-otklonenie-filtratciia-teksta-ne-korrektno-rab/.  Текст в Item и Detail находится только тогда, когда они заполнены в нижнем регистре. Работает, но смотрится не очень.... Где поправить, чтобы поиск действительно был регистронезависимым ?

×
×
  • Создать...