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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Рискну предположить, что Вам вряд-ли кто-то мог подсказать, если сам с подобным не сталкивался.

    Ну вот я сталкивался, но не с таким, а подобным, и не стал ничего писать дабы не вводить в заблуждение...

    Однако, после Вашего второго коммента я вспомнил про "системы" и т.п.

     

    "это зависит от системы или от видеокарты?"

    От системы! А если точнее - от версии DirectX или GDI+.

    И это наблюдается именно в XP. Хотя и там, если я правильно помню, можно поправить положение путем манипуляций с параметрами приложения.

    В коде проекта надо типа такого:

    begin
      GlobalUseDX10 := False;
      GlobalUseDX10Software := True;
      Application.Initialize;
      Application.CreateForm(TfmMain, fmMain);
      Application.Run;
    end.

    но тут многое зависит от того - чего Вы хотите от приложения. Качества? Скорости? Стабильности? Гарантии работы везде?

    Тогда комбинируйте. Если в этом есть необходимость...

    Но я бы оставил как есть.

     

    P.S. Не хочу никоим образом обидеть "обладателей" XP ), но она уже "пережиток" и отходит... И я бы не стал делать на ней упор. Хотя ее поддержка нужна однозначно!

  2. А разве не получается в DesignTime определить - как она должна "стартануть" ?

    FormFactor.Orientations = .... и ставьте как надо, а остальное отключите.

     

    А если не срабатывае, или нужно в процессе фиксировать определнную ориентацию, то непосредственно в коде можно типа так:

    Application.FormFactor.Orientations := [TFormOrientation.soLandscape];

    Это точно работает.

     

    Думаю, что правильно Вас понял.

  3. Без WMI никак не получится.
    Но в данном случае не совсем понятно - что Вас так смущает?
    Вы же конкретизировали свой вопрос - он находится в разделе "Windows"...

    А в FMX данной возможности нет, думаю, из-за того, что это все-таки FMX )))
    Т.е. - кроссплатформенная библиотека. А с учетом того, что HDD в мобильниках и планшетах (в большинстве) отсутствует, то тем-более было бы не совсем уместно, с точки зрения разработчиков FMX, такие "изюминки" реализовывать.

    Так-что таких оберток нет и Вам придется, судя по всему, делать это самому...

  4. Это не так просто описать "в двух словах". У меня, к сожалению, нет столько времени)

    Просто погуглите. В инете весьма много информации об этом. Например "delphi xe disable RTTI".

    Думаю, может кто-нибудь из наших гуру Вам подскажет где посмотреть более детально, или ссылки на статьи об этом даст.

     

    P.S. Тот же гугл по "RTTI" выдаст Вам море информации о том, что это такое и "с чем его едят"..

  5. Ну под Windows и MacOS можно типа так:

    function GetMyINIPath(const ASubdir: string = ''): string;
    begin
      try
        if ASubdir = '' then
        Result :=
          IncludeTrailingPathDelimiter({$IFDEF MACOS}'/Users/Shared/'{$ELSE}GetHomePath{$ENDIF}) +
          ChangeFileExt(ExtractFileName(ParamStr(0)), '')
        else
        Result :=
        IncludeTrailingPathDelimiter({$IFDEF MACOS}'/Users/Shared/'{$ELSE}GetHomePath{$ENDIF}) +
          ChangeFileExt(ExtractFileName(ParamStr(0)), '') + PathDelim + ASubdir;
        if not DirectoryExists(Result) then
          ForceDirectories(Result);
      except
        Result := '';
      end;
    end;
    

    А использовать, соответственно, так:

    TPath.Combine(GetMyINIPath, _ваш_файл_);

    А под Android, например, еще проще можно:

    TPath.Combine(TPath.GetDocumentsPath, _ваш_файл_);

    Может не слишком "красиво", но работать все должно.

  6. Уважаемый "d7d1cd"!

    Вы пытаетесь "сравнивать сладкое с мягким"...

    И на Delphi и на CBuilder в RAD Studio можно создать подобное приложение, которое будет объемом в несколько десятков килобайт...

    А оно Вам надо?

    И это принципиальный вопрос!

    Если вы хотите написать элементарное приложение, в смысле GUI, - пишите все "ручками". И тогда у Вас получится минимальный объем.

    Ведь ясно, что в исполняемый файл Delphi или CBuilder, по умолчанию включены библиотеки например RTTI. Именно они весят больше всего. (при желании - Вы их можете отключить! и тогда объем бинарника уменьшится! Но тогда Вам придется отказаться от многих весьма удобных механизмов...)

    Если вы создаете приложение с формами, разрабатываемыми в DesignTime, а не "ручками" в RealTime, то и это несет с собой много библиотек.

    Меня вот, например, как программиста, более чем устравивает объем получаемых бинарников, компилируемых RAD Studio.

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

     

    А при современных объемах доступной оперативной памяти, я бы на Вашем месте, переживал не за объем бинарника, а за объем "пожираемой" им памяти.

  7. Ну со скроллингом много чего "интересного"...

    Можно поступить разными способами. Для TListBox можно иное решение...

    Не знаю пока - как в XE7 с этим, а в Вашем случае:

     

    Первый вариант:

    ScrollBox1.ScrollBy(0, -MaxY);

    Здесь в качестве MaxY можно просто тупо "влупить" некое большое число (типа 10000)....

     

     

    Второй вариант:

    var
      MaxY : Single;
      I: Integer;
    begin
      MaxY := 0;
      with ScrollBox1 do
      for I := 0 to ControlsCount - 1 do
        if Controls[i] is TFmxObject then
          if Controls[i].Position.Y + Controls[i].Height > MaxY then
            MaxY := Controls[i].Position.Y + Controls[i].Height;
      ScrollBox1.ScrollBy(0, -MaxY);
    end;

    Есть, конечно, и другие варианты... Но это то, что первое в голову пришло "на скорую руку"...

  8. Допустим первая форма Form1 (и модуль Unit1), а вторая, соответственно, Form2 (и модуль Unit2).

     

    Тогда, если компонент со стилем расположен на первой форме, то в uses (после implementation) второй формы, нужно прописать Unit1.

    В этом случае в DisignTime второй формы Вы сможете в свойстве StyleBook увидеть компонент расположенный на первой форме...

     

    Типа так... ))

     

    А можно создать TDataModule, и на него скидывать компоненты, используемые формами приложения. Соответственно в uses у форм приложения пропишите юнит от TDataModule, и "вуа-ля" - аналогично первому варианту, выбирайте свойство.

  9. Andrey Yefimov написал Вам правильное решение.

    У любого объекта-анимации есть событие OnFinish.

    Вам нажно назначить (либо переопределить) обработчик этого события.

    Т.е. решение, примерно, такое:

    • нажимая на кнопку, запускаете анимацию (и не нужно ничего больше выполнять, так как нужно дождаться когда анимация закончится)
    • когда анимация закончится (возникнет событие OnFinish), выполните необходимые действия (вызовите в обработчике данного события процедуры/функции)

    и никаких ModalResult в данном случае не нужно...

     

    P.S. И еще. Если нужно, чтобы при нажатии на кнопку сначала что-то отработало в GUI (какой-то код, например, та же анимация), а лишь потом выполнить что-то далее (в том же обработчике нажатия на кнопку), то Вам требуется синхронизация в основном потоке.

  10. Вы не пробовали разместить нативный компонент JView на TLayout, а необходимую Вам панель на другом TLayout, расположенную поверх первой?

     

    P.S. Я может быть слишком условно все написал, но, думаю, Вы должны понять о чем я.

  11. Если вопрос решен, то, думаю, стоит закрыть его.

     

    Для того чтобы форма могла иметь размеры экрана или больше, при этом не "прилипала" к краям рабочего стола (как срабатывает Windows по умолчанию), нужно:

    чтобы форма имела следующие свойства (пишу только измененные по умолчанию):

    Border.Styling = False
    BorderStyle = None

    в этом случае форма может иметь любые размеры и перемещать Вы ее можете как угодно - она не будет "прилипать".

     

    При том, что это не ограничивает Вас в функциях изменения размеров и перемещения формы (размеры менять TSizeGrip, а перемещать за любой компонент на форме, если у него стоит свойство HitTest = True, а в обработчике компонента OnMouseDown просписано StartWindowDrag;)

     

    Чтобы форма, в случае отсутствия "рамок", адекватно реагировала на "жесты":

    - расположите на форме любой "контейнер" (TPanel например),

    - задайте ему свойство Align = Contents,

    - и установите HitTest = True.

    - А все элементы расположите на "контейнере".

  12. Ну как простой вариант - посмотрите http://stackoverflow.com/questions/10303256/how-to-take-a-screenshot-with-firemonkey-multi-platforms

     

    Там, конечно, староватое решение (для более ранней версии XE), но в принципе - должно все работать.

    Вам только нужно получать не хэндлы рабочего стола, а нужных Вам приложений.

     

    Может кто-то подскажет более правильное решение.

  13. Вы должны установить у TLable свойство Align = Center

     

    Если TLable находится на каком-то другом компоненте и должен как-то выравниваться, то поместите на родительский компонент новый TLayout с нужным Вам выравниванием, переместите на него Ваш TLable, установите нужные начальные размеры для TLable, и установите Align = Center.

    Только у TLayout свойство ClipChildren должно быть = False (чтобы при масштабировании не обрезалось TLable)

  14. Добрый!

     

    Без проблем!

    Если форма будет иметь следующие свойства (пишу только измененные по умолчанию):

    Border.Styling = False
    BorderStyle = None

    то форма может иметь любые размеры и перемещать Вы ее можете как угодно - она не будет "прилипать".

     

    Жесты обрабатываются нормально, но для этого нужно:

    1. расположить на форме любой "контейнер" (TPanel например),
    2. задать ему свойство Align = Contents,
    3. Установите HitTest = True.
    4. Все элементы расположите на "контейнере".

    В нашем приложении Sphere Live при отключенных рамках (в настройках можно включить/отключить стандартные рамки окна) мы так и делаем.

    (кстати в нашем приложении работает именно тот пример, который Вы и описали, в случае полноэкранного)

     

    P.S. Вам ведь не нужны рамки формы? Т.к. Вы хотите размеры формы больше размеров экрана... При том, что это не ограничивает Вас в функциях изменения размеров и перемещения формы (размеры менять TSizeGrip, а перемещать за любой компонент на форме, если у него стоит свойство HitTest = True, а в обработчике OnMouseDown просписано StartWindowDrag;)

  15. Ваш вопрос "Когда стоит ожидать?" был чересчур лаконичным. А посему - я Вас не правильно понял.

     

    Так-что извините, что "придрался" к Вашему вопросу (мне стоило повнимательнее прочитать название раздела).

  16. Вообще бред конечно... Никак не работает. Не убирается Status Bar.

     

    Друзья!

    Если кто пробовал, отпишите - получилось у кого-нибудь на Android убрать Status Bar?

    Речь идет о XE6.

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