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

Лидеры

  1. krapotkin

    krapotkin

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


    • Баллы

      12

    • Постов

      2 213


  2. Kitty

    Kitty

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


    • Баллы

      5

    • Постов

      792


  3. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      3

    • Постов

      851


  4. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      2

    • Постов

      2 517


Популярный контент

Показан контент с высокой репутацией 14.02.2017 во всех областях

  1. Kitty

    krapotkin и Равиль Зарипов

    Даже не знаю или в правильный раздел форума пишу. Я, например, хочу поблагодарить в своей теме - krapotkin и Равиль Зарипов за очень полезные ответы. Реально помогают решить вопросы. Спасибо. Хотя все они паскалисты, все же удается иногда получить код на С++ со стороны. Очень в этом помогает автор Indy rlebeau, например эту статью: Статья он переводит в С++ тут: C++ и никто бы другой не помог. В этом плане тяжело, без него и никак вопрос не решить. А этот форум это симбиоз ума и решений! Спасибо Ярославу за реализацию и хоты бы одного спеца по С++ как по Дельфи и - вот оно счастье. Спасибо!
    4 балла
  2. в том, что на билдере выполнение процедуры останавливается в ShowMessage код void __fastcall TForm1::Button1Click(TObject *Sender) { Label1->Text = L"До"; ShowMessage(L"Привет"); Label1->Text = L"После"; }
    2 балла
  3. krapotkin

    Обработка клавиатуры

    информация для размышления asdf<пробел>fgt<F1><F2><F3>
    2 балла
  4. а сейчас тут в точности написано следующее My_Procedure; Button1.Enabled := True;
    2 балла
  5. krapotkin

    TTask опасен (Android)

    вообще имхо плохой вариант делать анимацию через поток и sleep в данном случае я бы лучше наверное разделил анимацию на нужное кол-во ступеней и просто в таймере запускал их смысл абсолютно тот же ибо доп. поток будет работать только на Sleep, все остальное все равно происходит в главном
    2 балла
  6. Вот пример как у меня идет добавление в архив используя zip в MacOS: function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
    2 балла
  7. Ссылка: http://delphifmandroid.blogspot.ru/2016/02/alarmmanager-rad-studio.html Автор: Ефимов Андрей Описание: [AlarmManager] Автозапуск приложения в назначенное время
    1 балл
  8. [Статья][Android] AlarmManager - Автозапуск приложения в назначенное время
    1 балл
  9. Kitty

    krapotkin и Равиль Зарипов

    И еще курсы Ярославы были очень полезными. Даже С++ сишникам все было понятно...:) Ну это я про себя.
    1 балл
  10. пример с GridPanelLayout
    1 балл
  11. по поводу алгоритма закрытия формы через N секунд нужно вызвать из таймера диалог с сообщением. (лучше взять у ZuBy уже предложенную библиотеку MyDialogs. я начинал ее делать именно из-за того, что стандартные диалоги не вывозят) а на закрытие диалога повесить form.Release тогда все будет как вы хотите сначала выйдет сообщение. Потом закроется форма
    1 балл
  12. RoschinSpb

    Обработка клавиатуры

    См. документацию источник знаний: KeyDown или TKeyEvent. Key это скан код клавиши приведенный к виртуальным кодам клавиш windows. Это значение получается когда нажато некоторое сочетание клавиш к примеру Ctrl+<пробел>, такие нажатия последовательно передаются всем контролам, пока один из них не обработает его и не сбросит в 0. За некоторыми исключениями эти значения определяются физическим расположением клавиш, т. е. английская клавиша <A> будет всегда располагаться приблизительно в одном и том же месте и на Mac и на Win и в России и в Гондурасе. Keychar это введенная буква. Т.е. обычная буква которая вводится при наборе текста зависит от платформы, языка, выбранной раскладки способа ввода и прочих параметров. Такие нажатия передаются только фокусному контролу. Так что для Ctrl+<пробел> надо использовать проверку if (Key = vkSpace) and (ssCtrl in shift). Для проверки нажатия Ctrl+Ф надо использовать проверку if (Key = vkA) and (ssCtrl in shift) и ни каких Key = Ord('Ф') потому, что неизвестно какая на этом месте будет буква на каком-нибудь Mac из Японии. И более того Key = Ord('Ф') = $D4 - это зарезервированный код клавиши Key = Ord('ф') = $F4 - это VK_OEM_ENLW (Only used by Nokia) Key = Ord('a') = $61 - это vkNumpad1 (1 key numeric keypad) Но проще было бы создать действие (см. TActionList и TAction), назначить на него ShortCut выбрав одно из рекомендованных значений.
    1 балл
  13. krapotkin

    Обработка клавиатуры

    нет в данном случае ОРД это отец русской демократии ))) я же написал код, что еще? if (keychar = ' ') then
    1 балл
  14. Maximus

    Обработка клавиатуры

    if ord(KeyChar) = vkSpace then
    1 балл
  15. krapotkin

    Обработка клавиатуры

    блин, для цифробуквенных символов, тех, что отображаются в Edit, ответ в ord(keychar) = 32 для всех остальных - в Key а чтобы узнать нажат ли ctrl, есть shift таким образом if (keychar = ' ') and (ssCtrl in shift) then спасет ОРД.
    1 балл
  16. Andrey Efimov

    TTask опасен (Android)

    Правило: Обращение к любому визуальному компоненту в потоке только через TThread.Synchronize
    1 балл
  17. kami

    TTask опасен (Android)

    А там что? Обращение к визуальным компонентам?
    1 балл
  18. AngryOwl

    FMX TTaskbar

    Самое простое решение ("на коленке"): uses ... {$IFDEF MSWINDOWS} System.Win.ComObj, Winapi.ShlObj, {$ENDIF} ... //------------------------------------------------- type TTaskBarState = record name : string; value : byte; end; TFMXTaskBar = class(TPersistent) private fTaskBarList : ITaskBarList3; fTaskBarState : integer; fTaskBarProgress : integer; fAlertState : Boolean; procedure setTaskBarState(newState:integer); procedure setTaskBarProgress(newValue : integer); procedure setAlertState(const Value: Boolean); protected public property AlertState: Boolean read fAlertState write setAlertState; property TaskBarState : integer read fTaskBarState write setTaskBarState; property TaskBarProgress : integer read fTaskBarProgress write setTaskBarProgress; constructor Create; destructor Destroy; override; end; //------------------------------------------------- const taskStates : array [0..4] of TTaskBarState = ( (name: 'TBPF_NOPROGRESS'; value: TBPF_NOPROGRESS), (name: 'TBPF_INDETERMINATE'; value: TBPF_INDETERMINATE), (name: 'TBPF_NORMAL'; value: TBPF_NORMAL), (name: 'TBPF_ERROR'; value: TBPF_ERROR), (name: 'TBPF_PAUSED'; value: TBPF_PAUSED)); //------------------------------------------------- var MainTaskBar: TFMXTaskBar; //------------------------------------------------- { TFMXTaskBar } constructor TFMXTaskBar.Create; var tbList : ITaskBarList; hr : HRESULT; begin tbList := CreateComObject(CLSID_TaskBarList) as ITaskBarList; hr := tbList.QueryInterface(IID_ITaskBarList3, fTaskBarList); if hr <> S_OK then begin fTaskBarList := nil; tbList._Release; end; end; destructor TFMXTaskBar.Destroy; begin inherited; end; procedure TFMXTaskBar.setAlertState(const Value: Boolean); begin if assigned(fTaskBarList) then if fAlertState <> Value then begin fAlertState := Value; if Value then begin setTaskBarState(3); // TBPF_ERROR setTaskBarProgress(100); end else begin setTaskBarState(0); setTaskBarProgress(0); end; end; end; procedure TFMXTaskBar.setTaskBarProgress(newValue: integer); begin if assigned(fTaskBarList) then fTaskBarList.SetProgressValue(ApplicationHWND, newValue, 100); end; procedure TFMXTaskBar.setTaskBarState(newState: integer); begin if assigned(fTaskBarList) then fTaskBarList.SetProgressState(ApplicationHWND, taskStates[newState].value); end; //------------------------------------------------- initialization MainTaskBar := TFMXTaskBar.Create; finalization if Assigned(MainTaskBar) then FreeAndNil(MainTaskBar);
    1 балл
  19. Для мобильных есть (не)визуальные нативные компоненты TCustomPopover - http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.MultiView.Types.TCustomPopover TCustomListPicker - http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Pickers.TCustomListPicker TMultiView с режимом Popover TfgActionSheet - http://fire-monkey.ru/topic/3173-rx-fgx-описание-версии-071118/
    1 балл
  20. ну, ясно же что от языка программирования операционная система на зависит
    1 балл
  21. Предыстория была такая: Изначально такие плитки были сделаны на Button'ах (стиль) и TPresentedScrollBox. Но как только пошло дело в тест основательный идею тут же выбросил. 120+ элементов выключили телефон (samsung ace2 duos) при отрисовке, точней при динамической загрузке картинок. да и в целом вся эта беда работает медленней чем реализация на TListView Я не художник, но смысл вроде передал Пример: У нас есть 12 элементов,и 4 колонки Можно в LV отрисовывать дополнительные "контролы" и поместить в один реальный айтем, 4 виртуальные панельки (в нашем случае) Для того чтобы такое получилось: 1) ListView должна при ресайзе рассчитать сколько колонок она может иметь (ширина LV / на ширину одной панельки) 2) дальше Вам нужно будет разбить отрисовку Itema на 4 панельки 2.1) тоже самое проделать и при выделении 3) При таком подходе не будет стандартных элементов отображения (Text, Detail, Image и прочее нужно выключить) Добавление Itema будет проходить в два цикла: первый добавляет реальный Item (0-2), а второй заполняет данными наши поля в панельках (title1, price1, bitmap1, title2, price2, bitmap2 и тд...) 4) Ну и самое важное в OnUpdateObjects все это отрисовать Надеюсь вам это поможет!
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...