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

slav_z

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

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

  • Посещение

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

    33

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

  1. Like
    slav_z получил реакцию от dnekrasov в Разработка кросплатформенных приложений в одном проекте   
    ну как так то? условная компиляция! посмотрите в исходных кодах дельфи... там куча примеров...  КУЧА!!!

     
  2. Like
    slav_z получил реакцию от Ingalime в MSacc проблема с подключением   
    для начала попробуйте настроить подключение через мастер подключения в designtime...  когда получится...  откройте форму как текст (fmx) и посмотрите что там и как указано для подключения...  повторите то же самое в runtime...
  3. Like
    slav_z получил реакцию от Ingalime в MSacc проблема с подключением   
    зачем у вас тут нетипизированные параметры? сделайте два разных метода и не будет такой каши.
    function bdconected(s2:string;s1,s{,sd}: TObject): string;
  4. Like
    slav_z получил реакцию от dnekrasov в Rio 10.3. Выделение текста в TText   
    минимальный код:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Text1: TText; procedure Text1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Text1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure Text1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure FormCreate(Sender: TObject); private Range: TTextRange; function TextLayout: TTextLayout; public function GetSelectedText: string; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin Text1.AutoCapture:=True; end; type TTextAccess = class(TText); function TForm1.TextLayout: TTextLayout; begin Result:=TTextAccess(Text1).Layout; end; function TForm1.GetSelectedText: string; begin Result:=Text1.Text.Substring(Range.Pos,Range.Length); end; procedure TForm1.Text1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Range.Pos:=TextLayout.PositionAtPoint(PointF(X,Y)); Range.Length:=0; Text1.Repaint; end; procedure TForm1.Text1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if Text1.Pressed then begin Range.Length:=TextLayout.PositionAtPoint(PointF(X,Y))-Range.Pos; Text1.Repaint; end; end; procedure TForm1.Text1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color:=claSilver; Canvas.Fill.Kind:=TBrushKind.Solid; for var R in TextLayout.RegionForRange(Range,False) do Canvas.FillRect(R,0,0,AllCorners,1); end; end.  
    textselected.zip
  5. Like
    slav_z получил реакцию от Ingalime в Rio 10.3. Выделение текста в TText   
    минимальный код:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Text1: TText; procedure Text1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Text1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure Text1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure FormCreate(Sender: TObject); private Range: TTextRange; function TextLayout: TTextLayout; public function GetSelectedText: string; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin Text1.AutoCapture:=True; end; type TTextAccess = class(TText); function TForm1.TextLayout: TTextLayout; begin Result:=TTextAccess(Text1).Layout; end; function TForm1.GetSelectedText: string; begin Result:=Text1.Text.Substring(Range.Pos,Range.Length); end; procedure TForm1.Text1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Range.Pos:=TextLayout.PositionAtPoint(PointF(X,Y)); Range.Length:=0; Text1.Repaint; end; procedure TForm1.Text1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if Text1.Pressed then begin Range.Length:=TextLayout.PositionAtPoint(PointF(X,Y))-Range.Pos; Text1.Repaint; end; end; procedure TForm1.Text1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color:=claSilver; Canvas.Fill.Kind:=TBrushKind.Solid; for var R in TextLayout.RegionForRange(Range,False) do Canvas.FillRect(R,0,0,AllCorners,1); end; end.  
    textselected.zip
  6. Like
    slav_z отреагировална Евгений Корепов в информация о версии консольного приложения   
    https://unix.stackexchange.com/questions/58846/viewing-linux-library-executable-version-info
  7. Like
    slav_z отреагировална krapotkin в Сортировка TListViewItems   
    кривое тз всегда дает еще более кривое решение
    сортировать надо данные, а не компоненты на экране
    отсортировать список - доли секунды, вывести его на экран - тоже
    а вот работать с неповоротливыми экранными компонентами это ну никак не быстро
     
  8. Like
    slav_z отреагировална Евгений Корепов в Запуск демона на Linux   
    Вот просто идеальная статья по запуску демона под Linux http://blog.paolorossi.net/2017/09/04/building-a-real-linux-daemon-with-delphi-part-2/ 
    Помимо объяснения механизма fork с отличными примерами,  есть куча дополнительной наиполезнейшей инфы.
  9. Like
    slav_z получил реакцию от Ingalime в Требуется приложение на на все смартфоны   
    загружаются стили в элементы списков (по-умолчанию они загружаются когда надо в первый раз нарисовать элемент...)  попробуйте использовать BeginUpdate перед созданием и EndUpdate после... (вообще всегда используйте эти методы при создании списков на экране)
  10. Like
    slav_z получил реакцию от Ingalime в Требуется приложение на на все смартфоны   
    хорошо! тогда обнуляйте ExceptionMessage вместе с break; т.к. на одной из предыдущих итерации сервер может вернуть не 200 (черт его знает)... и вообще проверка <>'Такой но...' должна выполняться только если сервер вернул 200.... кроме того надо выходить из цикла если пользователь закрывает программу во время вашей обработки (Thread.CheckTerminated кажется)...  иначе, пока ваш цикл полностью не отработает, программа не закроется...
  11. Like
    slav_z отреагировална krapotkin в Еще раз о потоках   
    зачем так сложно?
    вешаем на OnTerminate потока обработчик. В нем запускаем следующее задание и т.д.. 
  12. Like
    slav_z отреагировална Евгений Корепов в Delphi FastCGI клиент для php-fpm и подобного   
    Класс для работы с FastCGI серверами, такими как php-fpm.
    Для тех кто не в теме : веб-сервер, к примеру nginx, получает запросы и отправляет их на исполнение FastCGI серверу, к примеру php-fpm, php-fpm получает имя скрипта, параметры, выполняет все и возвращает результат в nginx, который в свою очередь возвращает этот результат запросившему клиенту.
    С помощью класса вы можете так же, выполнять php скрипты на локальном или удаленном сервере.
    Исходники https://github.com/EvgeniyKorepov/FastCGIClient
    Пример delphi
    var FFastCGI : TFastCGI; ... procedure TFormMain.FormCreate(Sender: TObject); var AHost : String; APort : Word; AScriptFileName, ARequest, AContent : String; begin AHost := '10.0.0.4'; APort := 9000; FFastCGI := TFastCGI.Create(AHost, APort); FFastCGI.KeepAlive := True; AScriptFileName := '/opt/xxx.php'; ARequest := 'request=1234567890'; if FFastCGI.Get(AScriptFileName, ARequest, AContent) then Memo.Text := AContent else Memo.Text := FFastCGI.StatusCode.ToString + ' ' + FFastCGI.StatusText; end; пример php 
    <?php header('Content-Type: text/html; charset=utf-8'); if (isset($_REQUEST["request"])) if ($_REQUEST["request"] == "1234567890") { header("Status: 200"); echo 'OK'; } else { http_response_code(400); echo "ERROR"; }  
  13. Like
    slav_z отреагировална Алексей Данильченко в Отправка файлов через намерение   
    Может кому пригодится. вот решение.
    procedure TfrmSendEmail.SendEmail(); {$IF DEFINED(ANDROID)} var lIntent: JIntent; lJRecipient: TJavaObjectArray<JString>; lURI: Jnet_Uri; lJFile: JFile; lFileName: string; lFilePath: string; {$ENDIF} begin {$IF DEFINED(ANDROID)} lJRecipient:= TJavaObjectArray<JString>.Create(1); lJRecipient.Items[0]:= StringToJString(eEmail.Text); lFileName:= AttachFileName; lFilePath:= System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetSharedDownloadsPath, lFileName); lIntent:= TJIntent.Create; lIntent.setType(StringToJString('application/excel')); lIntent.setAction(TJIntent.JavaClass.ACTION_SEND); lIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); lIntent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, lJRecipient); lIntent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(eSubject.Text)); lIntent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(mEmailMessage.Text)); lJFile:= TJFile.JavaClass.init(StringToJString(lFilePath)); lURI:= TAndroidHelper.JFileToJURI(lJFile); lIntent.setData(lURI); lIntent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((lURI as ILocalObject).GetObjectID)); TAndroidHelper.Activity.startActivity(lIntent); {$ENDIF}  
  14. Thanks
    slav_z получил реакцию от Anatoliy в Срабатывает OnClick на ListBox при скроллинге   
    OnTap лучше не используйте, я бы сделал на обычный OnClick... перед вызовом действий, связанных с элементами списка (ваши ShowMessage 1,  ShowMessage 2 ), просто проверьте "а не прокручивается ли сейчас listbox (scrollbox)" с помощью ListBox.AniCalculations.Moved...
  15. Like
    slav_z отреагировална Brovin Yaroslav в Включение своих файлов в приложение   
    Добрый вечер,
     
    Тут есть два способа:
    Работа с Deployment менеджером. Он довольно подробно описан на Embarcadero Doc Wiki: http://docwiki.embarcadero.com/RADStudio/XE5/en/Deployment_Manager Работа через менеджер ресурсов и их получение через ResourceStream. Этот способ описал MyDelphiPw в сообщении выше тут. 1. Deployment Manager
    Специальная настройка проекта, которая позволяет указать, какие файлы нужно включить в состав пакета (Андроид) или бандла (iOS). Суть его работы простая, вы указываете какие файлы с вашего компьютера нужно перенести на устройство (в какое место). А далее работаете с ними из приложения так, как при обычной работе с файлами под Windows.
     
    На мобильных платформах нужно учесть специфику возможных местоположений файла. Пакет/Бандл (приложение) не допускает изменения внутренних файлов, потому что подписывается сертификатом. Поэтому теоретически при изменении файлов приложения, вы нарушаете целостность подписи. Именно по этому файлы внутри пакета/бандла доступны только на ЧТЕНИЕ.
     
    Однако, мобильные платформы предлагают широкий круг специальных мест для хранения (временные папки, песочницы, документы, карточка памяти и тд) изменяемых файлов (например файл локальной базы данных, или настройки в ini файле и тд).
     
    Описание всех вариантов местоположений с описанием путей есть в записе TPath (RTL): http://docwiki.embarcadero.com/RADStudio/XE5/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms. 

    Общие действия для использования менеджера развертывания такие:
    1. Открываем менеджер развертывания: Системное Меню -> Project -> Deployment.

    2. Выбираем в верхнем выпадающем меню платформу и конфигурацию сборки.

    3. Нажимаем кнопку добавить файл и выбираем нужный файл.
     
    4. Указываем местоположение файла, куда он должен поместиться после развертывания приложения на устройстве. Тут есть особенность, если файл нужен только на чтение, то пути менять не надо. Если возможна ситуация, когда файл может быт изменен, то файл нужно поместить под iOS в Startup\Documents\ (регистр важен)

    Под Андроид в assets\internal (регистр важен) - для внутреннего доступа из пакета приложения или assets - для внешнего доступа

    5. Получаем пути к расположению файлов:
    Под iOS:
    TPath.Combine(TPath.GetDocumentsPath, 'filename') Под Андроид:
    TPath.Combine(TPath.GetDocumentsPath, 'filename') { Внутренний доступ} TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { Внешний доступ } Полезные ссылки
    Подробное руководство по добавлению файлов для iOS: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_iOS_App#Loading_and_Deploying_Files Подробное руководство по добавлению файлов для Android: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App#Loading_and_Deploying_Files
  16. Like
    slav_z получил реакцию от Maka в Срабатывает OnClick на ListBox при скроллинге   
    в OnClick элемента списка сделайте проверку:
    procedure TForm1.ListBoxItemClick(Sender: TObject); begin if not ListBox.AniCalculations.Moved then DoItemClick; end;  
  17. Like
    slav_z получил реакцию от #WAMACO в Срабатывает OnClick на ListBox при скроллинге   
    в OnClick элемента списка сделайте проверку:
    procedure TForm1.ListBoxItemClick(Sender: TObject); begin if not ListBox.AniCalculations.Moved then DoItemClick; end;  
  18. Like
    slav_z получил реакцию от Ingalime в Срабатывает OnClick на ListBox при скроллинге   
    в OnClick элемента списка сделайте проверку:
    procedure TForm1.ListBoxItemClick(Sender: TObject); begin if not ListBox.AniCalculations.Moved then DoItemClick; end;  
  19. Like
    slav_z получил реакцию от Ingalime в Как добавить jar файл в проект   
    Теперь после сборки ваш класс java будет добавлен в файл classes.dex (да! файл classes.dex ниоткуда не копируется, он собирается из файлов которые указаны в этом списке (см.картинку) поэтому его можно легко дополнить собственными классами java или убрать ненужные системные).
    Остается вопрос компиляции файла исходников java в jar-файл, но тут уж каждый сам за себя...

  20. Like
    slav_z получил реакцию от Ingalime в Добавить iOS в существующий проект   
    хотел бы я сказать, что это можно сделать через IDE, но...
    откройте файл <project_name>.dproj, идите в самый конец. найдите секцию <Platforms> и добавьте туда что надо. например это может выглядеть так:
    <Platforms> <Platform value="Android">True</Platform> <Platform value="Android64">True</Platform> <Platform value="iOSDevice32">True</Platform> <Platform value="iOSDevice64">True</Platform> <Platform value="iOSSimulator">True</Platform> <Platform value="OSX32">True</Platform> <Platform value="OSX64">True</Platform> <Platform value="Win32">True</Platform> <Platform value="Win64">True</Platform> </Platforms>  
     
     
  21. Thanks
    slav_z получил реакцию от Олег Киреев в OpenDialog для мобильных платформ   
    uses System.SysUtils, System.IOUtils, System.Permissions, System.Messaging, FMX.Dialogs; uses Androidapi.Helpers, Androidapi.JNI.Os, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Webkit, Androidapi.JNI.Net, Androidapi.JNI.App, Androidapi.JNI.Support, FMX.Platform.Android; это потребуется
  22. Thanks
    slav_z получил реакцию от Олег Киреев в OpenDialog для мобильных платформ   
    вот кусок кода "вырванный" из проекта (написано благодаря ссылке ярослава выше- спасибо):
    MimeType = image/* - для картинок. если что не так, комментируйте.
    type TDialog = class private FProc: TProc<string>; procedure ResultCallback(const Sender: TObject; const M: TMessage); public constructor Create; destructor Destroy; override; procedure Show(const MimeType: string; Proc: TProc<string>); end; constructor TDialog.Create; begin TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, ResultCallback); end; destructor TDialog.Destroy; begin TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, ResultCallback); end; procedure TDialog.ResultCallback(const Sender: TObject; const M: TMessage); var FilePath: string; begin if TMessageResultNotification(M).RequestCode = 5 then if TMessageResultNotification(M).ResultCode = TJActivity.JavaClass.RESULT_OK then begin FilePath:=JStringToString(TMessageResultNotification(M).Value.getData.getPath); FProc(FilePath); end; Free; end; procedure TDialog.Show(const MimeType: string; Proc: TProc<string>); var Intent: JIntent; begin FProc:=Proc; Intent:=TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_PICK); Intent.setType(StringToJString(MimeType)); MainActivity.startActivityForResult(Intent,5); end; procedure OpenFileDialog(const MimeType: string; Proc: TProc<string>); begin RequestPermissionsExternalStorage( procedure(Granted: Boolean) begin if Granted then TDialog.Create.Show(MimeType,Proc); end); end;  
  23. Like
    slav_z получил реакцию от Евгений Корепов в Положение скролла.   
    function IsEndScroll(ScrollBox: TCustomScrollBox): Boolean; begin Result:=ScrollBox.ViewportPosition.Y>=ScrollBox.ContentBounds.Height-ScrollBox.ClientHeight; end;  
  24. Thanks
    slav_z получил реакцию от Шамсуддин в Работа с атрибутами текста   
    Как сделать текст с подобными атрибутами? Очень просто!
    (Цвет текста не работает в XE8) Вот весь код:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Button1: TButton; Text1: TText; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} type TTextAccess = class(TText); procedure ClearTextAttribute(Text: TText); begin TTextAccess(Text).Layout.ClearAttributes; end; procedure AddTextAttribute(Text: TText; Pos,Length: Integer; FontStyles: TFontStyles; FontColor: TAlphaColor); var Font: TFont; begin Font:=TFont.Create; Font.Assign(Text.Font); Font.Style:=FontStyles; TTextAccess(Text).Layout.AddAttribute( TTextRange.Create(Pos,Length), TTextAttribute.Create(Font,FontColor)); end; procedure TForm1.Button1Click(Sender: TObject); begin AddTextAttribute(Text1,10,17,[TFontStyle.fsBold],claRed); AddTextAttribute(Text1,34,8,[TFontStyle.fsUnderline],claBlue); AddTextAttribute(Text1,47,8,[TFontStyle.fsStrikeOut],claGreen); Text1.Repaint; end; end.  
  25. Like
    slav_z получил реакцию от Mars M в Работа с атрибутами текста   
    Как сделать текст с подобными атрибутами? Очень просто!
    (Цвет текста не работает в XE8) Вот весь код:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Button1: TButton; Text1: TText; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} type TTextAccess = class(TText); procedure ClearTextAttribute(Text: TText); begin TTextAccess(Text).Layout.ClearAttributes; end; procedure AddTextAttribute(Text: TText; Pos,Length: Integer; FontStyles: TFontStyles; FontColor: TAlphaColor); var Font: TFont; begin Font:=TFont.Create; Font.Assign(Text.Font); Font.Style:=FontStyles; TTextAccess(Text).Layout.AddAttribute( TTextRange.Create(Pos,Length), TTextAttribute.Create(Font,FontColor)); end; procedure TForm1.Button1Click(Sender: TObject); begin AddTextAttribute(Text1,10,17,[TFontStyle.fsBold],claRed); AddTextAttribute(Text1,34,8,[TFontStyle.fsUnderline],claBlue); AddTextAttribute(Text1,47,8,[TFontStyle.fsStrikeOut],claGreen); Text1.Repaint; end; end.  
×
×
  • Создать...