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

rareMax

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

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

  • Посещение

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

    35

Активность репутации

  1. Like
    rareMax отреагировална enatechno в Анимированные элементы   
    buttonstyle.zip
  2. Like
    rareMax отреагировална Alexander в Скроллинг множества TEdit расположенных на TScrollBox   
    Моё ИМХО,  придётся решать алгоритмически. Если изначально у всех Edit.HitTest :=False; то появления клавиатуры не будет и перемещение будет согласно жесту. А вот как как вводить Edit в режим доступа и редактирования, тут надо пробовать. Если в лоб, то двойной клик(или Tap) по Edit, по сути будет клик по scrollbox. Получение координат и определение, какой edit находится на клике.  Соответственно Edit.HitTest :=True ; ввод с клавиатуры,  уводить фокус с edit, Edit.HitTest := False; 
  3. Like
    rareMax отреагировална DirtyBorov в MaskEdit   
    Случилось так, что потребовался мне ввод номера телефона. Компонента, аналога TMaskEdit в FMX нет, так что пришлось "изобретать на коленке". Компонент писать было лень, потому просто покажу как я решил это в конкретном диалоге с использованием TEdit. Может кому то пригодится. Из кода я убрал все лишнее, оставил только то что относится к делу.
    uses .... System.MaskUtils, System.Character; type TFormRegistry = class(TForm) edtPhone: TEdit; procedure edtPhoneValidating(Sender: TObject; var Text: string); procedure edtPhoneKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure edtPhoneEnter(Sender: TObject); procedure edtPhoneTyping(Sender: TObject); private const Mask = '+7(000)000-00-00;0;*'; /// '+0(000)000-00-00;0;*' - для других стран, например для Украины +3(999).... private PhoneNumber: string; function GetCaretPos: Integer; function GetMaxLength: integer; public end; procedure TFormRegistry.FormCreate(Sender: TObject); begin edtPhone.Text := FormatMaskText(Mask, PhoneNumber); end; function TFormRegistry.GetCaretPos: Integer; var i: integer; begin Result := 0; for i := 0 to Mask.Length-1 do begin if not (MaskGetCharType(Mask, i) in [mcDirective, mcMask]) then Result := Result + 1; if (Result + PhoneNumber.Length) = i then Break; end; Result := Result + PhoneNumber.Length - 1; end; function TFormRegistry.GetMaxLength: integer; var i: integer; begin Result := 0; for i := 0 to Mask.Length-1 do if (MaskGetCharType(Mask, i) in [mcMask]) then Result := Result + 1; end; procedure TFormRegistry.edtPhoneKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if (Key = 8) and (PhoneNumber.Length > 0) then PhoneNumber := Copy(PhoneNumber, 1, PhoneNumber.Length-1) else if (PhoneNumber.Length < GetMaxLength) and (Key = 0) and IsDigit(KeyChar) then PhoneNumber := PhoneNumber + KeyChar else KeyChar := #0; end; procedure TFormRegistry.edtPhoneEnter(Sender: TObject); begin edtPhone.CaretPosition := GetCaretPos; end; procedure TFormRegistry.edtPhoneTyping(Sender: TObject); begin edtPhone.CaretPosition := GetCaretPos; end; procedure TFormRegistry.edtPhoneValidating(Sender: TObject; var Text: string); begin Text := FormatMaskText(Mask, PhoneNumber); end; end.
  4. Like
    rareMax отреагировална krapotkin в Частичная прозрачность   
    png с дыркой вне конкуренции...
  5. Like
    rareMax отреагировална dnekrasov в Как запустить дочерний процесс на Маке?   
    Вот пример как у меня идет добавление в архив используя 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; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
  6. Like
    rareMax отреагировална RoschinSpb в Уничтожение фрейма при нажатии на кнопку   
    В качестве послесловия.
    Деструктор объекта не может быть вызван внутри метода этого объекта (самоубийства запрещены). Всегда можно поставить точку останова на вызов метода Free/FreeAndNil. И внимательно посмотреть стек вызова, если где-то в стеке вызова присутствует разрушаемый объект, то это не правильно. Сложности добавляет то, что это не обязательно приводит возникновению AV, вполне может быть, что у вас всё будет работать без ошибок, а на другом компьютере, или на другой платформе с ошибками.
    Release на самом деле приводит к отложенному удалению не внутри вызывающего метода, т.е. объект просто помечается как готовый к удалению.
  7. Like
    rareMax получил реакцию от Rusland в TNetHTTPClient, php и select   
    На сколько я понимаю это не совсем вопрос по делфи... но держи
    http://ru.stackoverflow.com/questions/284297/Вывести-из-базы-mysql-в-виде-json-массива
  8. Like
    rareMax получил реакцию от Kitty в TNetHTTPClient, php и select   
    Целый раздел с примерчиками: http://fire-monkey.ru/forum/130-json/
  9. Like
    rareMax получил реакцию от afors в Редактор форм   
    В общем. Есть такой контрол: TSelection. Если нужно произвести операцию над каким-либо контролом(Назовем его  MyControl)  -  помещаешь MyControl на TSelection . Делаешь TAlign у MyControl на весь клиент. Делаешь HitTest := False; 
    В итоге можешь двигать и менять размеры контрола 

  10. Like
    rareMax получил реакцию от Major в TNetHTTPClient, php и select   
    Целый раздел с примерчиками: http://fire-monkey.ru/forum/130-json/
  11. Like
    rareMax получил реакцию от Major в TNetHTTPClient, php и select   
    На сколько я понимаю это не совсем вопрос по делфи... но держи
    http://ru.stackoverflow.com/questions/284297/Вывести-из-базы-mysql-в-виде-json-массива
  12. Like
    rareMax отреагировална kami в Уничтожение фрейма при нажатии на кнопку   
    Нет, не пойдет. Потому что DoOnCloseInfo по прежнему вызывается из внутренностей TButton.Click. Если ваш код отрабатывает на Windows - это ваша недоработка, а не показатель правильности. Причины я изложил выше. А на мобильных платформах с фреймом визуально просто ничего не произойдет. Причины опять-таки изложил выше.
    И в таком виде тоже не пойдет.
    Потому что Synchronize и Queue, будучи вызванными из главного потока, моментально передают управление в метод, а не дожидаются очередного витка выборки сообщений у Application. В таком виде вы просто добавляете несколько вложенных вызовов, увеличивая занятость стека. Не меняя при этом концепцию работы.
  13. Like
    rareMax отреагировална 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);  
  14. Like
    rareMax отреагировална Равиль Зарипов (ZuBy) в Как начать жить с TDialogService.InputQuery?   
    ты можешь это легко исправить, uses FMX.Dialogs.Default, на что фантазии хватит
    это под Windows
  15. Like
    rareMax получил реакцию от Major в Живое связывание с таблицей БД   
    https://www.youtube.com/user/EmbarcaderoTechNet
    и для совсем ленивых https://www.youtube.com/results?search_query=delphi+livebindings
  16. Like
    rareMax получил реакцию от Равиль Зарипов (ZuBy) в Обязателен ли AddObject?   
    AddObject  используйте если нужно добавить несколько объектов в другой объект. Например несколько  MyLabel_N  в  MyRect/
     
    И считайте что  FParent.AddObject(FChild)  и  FChild.Parent := FParent это просто синонимы
  17. Like
    rareMax получил реакцию от Major в Живое связывание с таблицей БД   
    Я на данный момент работаю с БД через Marshmallow ORM - и вполне доволен. Возможно для вас это и не выход - тогда пытайтесь подружиться с ЛайвБайндингом. Там кстати вебинар скоро по нему будет))
     
  18. Like
    rareMax получил реакцию от Brovin Yaroslav в Надолго зависает код при загрузке из интернета   
    Вы правы.
  19. Like
    rareMax получил реакцию от Brovin Yaroslav в Обязателен ли AddObject?   
    AddObject  используйте если нужно добавить несколько объектов в другой объект. Например несколько  MyLabel_N  в  MyRect/
     
    И считайте что  FParent.AddObject(FChild)  и  FChild.Parent := FParent это просто синонимы
  20. Like
    rareMax получил реакцию от MaratBest в Надолго зависает код при загрузке из интернета   
    Вы правы.
  21. Like
    rareMax отреагировална krapotkin в Передача фокуса элементу стиля   
    стиль должен заведовать оформлением а не функционалом 
    если в стиль запихать TButton и TEdit то как потом с этим добром работать-то?
    только в OnApplyStyle ?
    Это нужно реализовывать стандартным образом, вставляя компоненты друг в друга. Тогда и свойства все доступны...
    Если нужно повторяющийся комплект использовать, то кинуть это все в TFrame
  22. Like
    rareMax получил реакцию от Равиль Зарипов (ZuBy) в Обязателен ли AddObject?   
    А для чего написал его? Вполне достаточно указать Parent. 
  23. Like
    rareMax отреагировална Error в ErrorSoft TurboUpdate - Автообновление ваших Windows приложений   
    Выложена альфа версия ErrorSoft TurboUpdate - библиотека для легкого добавления автообновления в ваши FMX и VCL приложения под Windows.
    Совместимость - Delphi Seattle и выше.
    Описания пока нет, но в репозитории есть примеры для ознакомления.
    Лицензирование - для OpenSource и не коммерческого использования данная библиотека абсолютно бесплатна, допустимо изменение и т.д.
    Для коммерческого применения - пока нет решения.
    https://github.com/errorcalc/TurboUpdate
    Перед использованием необходимо установить необходимые Packages:
    TurboUpdateFmxOnly.groupproj - FMX only. TurboUpdateGroup.groupproj - VCL + FMX, зависит от ErrorSoftVclComponents(https://github.com/errorcalc/FreeEsVclComponents). Это ранняя альфа, необходимы ваши отзывы, критика и т.д.
  24. Like
    rareMax получил реакцию от Rusland в Как Delphi собирает apk файл?   
    Играйся, http://www.javadecompilers.com/apk
  25. Like
    rareMax получил реакцию от Kitty в Как Delphi собирает apk файл?   
    Играйся, http://www.javadecompilers.com/apk
×
×
  • Создать...