-
Постов
776 -
Зарегистрирован
-
Посещение
-
Победитель дней
27
Активность репутации
-
#WAMACO отреагировална Олег Киреев в Приложение 3D примера работы некоторых механизмов v.1.0. Для OS Win.
Приложение для наглядного обучения работы некоторых механизмов автомобиля и автобуса.
Работает в OS Windows. Есть возможность записи процесса в формате
AVI. Можно изменять прозрачность и посмотреть что внутри.
СпасиБО EMBARCADERO!
Автор: Олег Киреев - ведущий инженер-конструктор.
kireevoleg@gmail.by тел. +375 29 676 13 84.
Республика Беларусь г.Минск.
3D Работа механизмов.rar
-
#WAMACO получил реакцию от Олег Киреев в Подбор и расчёт карданного вала v18.0 для OS Window
Хорошо. Только Windows 7 64 у меня на работе и выслать ролик с ошибкой смогу только после 16 января!!
-
#WAMACO отреагировална Евгений Корепов в fgActivityDialog
Подумал и сделал более изящно - изменил метод Show.
procedure TForm1.Button1Click(Sender: TObject); begin fgActivityDialog.Message := 'Teste'; fgActivityDialog.Show(3000); end; procedure TForm1.Button1Click(Sender: TObject); begin fgActivityDialog.Message := 'Teste'; fgActivityDialog.Cancellable:=True; fgActivityDialog.Show; end; Вот код :
-
#WAMACO отреагировална Freezer_86 в WebBrowser + ComboBox = ошибка ?
Это не очень относиться к теме но оставлю это здесь, вдруг кому пригодиться. В моей задаче нужно было еще отслеживать на какой странице находиться пользователь, а как оказалось свойство URL тоже работает некорректно. Пришлось "накостылять" следующее:
В WebBrowser.Android.pas добавляем:
function TAndroidWebBrowserService.originalUrl: string; begin if FJWebBrowser = nil then Result := FURL else Result := JStringToString(FJWebBrowser.getOriginalUrl); end; В WebBrowser.Win.pas добавляем:
function TWindowsWebBrowserService.LocationUrl: string; begin Result := FUrl; if FInstance <> nil then Result := FInstance.LocationURL; end; В WebBrowser.pas изменим:
function TKCustomWebBrowser.GetURL: string; begin if (csDesigning in ComponentState) or (FWeb = nil) then Result := FURL else {$IFDEF MSWINDOWS} Result := (FWeb as TWinWBMediator).WB.LocationUrl; {$ELSE} Result := (FWeb as TAndroidWebBrowserService).originalUrl {$ENDIF} end; Как результат - корректная работа панели навигации.
-
-
#WAMACO отреагировална Евгений Корепов в OnUpdateObjects выполняется дважды
Если вы понаблюдаете дальше, то обнаружите что выполняется гораздо больше раз. Попробуйте к примеру повернуть устройство горизонтально, потом опять вертикально - еще пара выполнений.
OnUpdateObjects и OnUpdatingObjects выполняется постоянно - при изменении размеров, скрытии и повторном показе, переключении приложений и т.д. В справке так и написано "Occurs immediately after the list view component is updated."
Так что надо придерживаться двух правил :
1. При добавлении/изменении TListViewItem отключайте обработку вышеуказанных процедур.
Setting.Flags.ListViewUpdating:=True; // Глобальная переменная или ListView.OnUpdatingObjects:=nil; AItem:=ListView.Items.Add; AItem.Data['Type']:='MySuperPuperItem'; AItem.Data['Name']:=AName; AItem.Data['Value']:=AValue; Setting.Flags.ListViewUpdating:=False; // Глобальная переменная или ListView.OnUpdatingObjects:=ListViewUpdatingObjects; AItem.Adapter.ResetView(AItem); // принудительно вызываем ListViewUpdatingObjects ... procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if Setting.Flags.ListViewUpdating then // Если используете глобальную переменную Exit; ... 2. Внутри OnUpdateObjects и OnUpdatingObjects при добавлении TListItemText и прочих элементов, проверяйте их существование, возможно они уже были добавлены вашим кодом ранее.
-
-
#WAMACO отреагировална krapotkin в Разница между Push и Сервисом
какую еще разницу нужно, если мне нужно либо ПИСАТЬ сервис и устанавливать его на девайс или НЕ ПИСАТЬ сервис ?
-
#WAMACO отреагировална Евгений Корепов в Кнопка "Добавить в избранное"
Кнопка "Добавить в избранное" и соответственно раздел Избранное в профиле очень помогли бы в работе с форумом. Добавлять в избранное хочется отдельные посты. Потому как поиск работает плохо и искать когда то попавшееся на глаза нужное решение найти проблематично.А так бы ткнул на Добавить в избранное, по мере надобности зашел в свое Избранное, увидел разбитое по разделам форума списки избранного и нашел что нужно.
Заранее благодарю!
-
#WAMACO отреагировална krapotkin в ListView скрывает повторяющийся текст заголовков
я выкладывал рабочий пример для берлина, как и что создается
-
#WAMACO отреагировална krapotkin в ListView скрывает повторяющийся текст заголовков
с чего бы мелочь. несколько (а не стандартные текст/детейл) элементов с разным оформлением и раскладкой, зависящих от данных, управление высотой итема, рисование самодельных элементов, иконок, реакция на клики
-
#WAMACO отреагировална kami в Разница в вызовах Synchronize
Разница есть. И она не только в вызове Synchronize, но и Queue.
Указание потока в качестве источника метода синхронизации позволяет вам впоследствии сделать TThread.RemoveQueuedEvents(myThread) перед его удалением.
Вызов RemoveQueuedEvents необходим, если в синхронизируемых методах может идти обращение к полям и методам уничтожаемого потока. Потому что с удалением потока то, что подлежало синхронизации, никуда не пропадет, а раз поток уже не существует - у вас вылезет AV на ровном месте. Или же ваш код испортит чью-то память, что еще труднее отловить.
-
#WAMACO отреагировална gonzales в Пуши в IOS
Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
-
#WAMACO отреагировална kami в Открытие ссылки в проекте Firemonkey
Вы не там ифдефы пишете. Не нужно здесь много модулей.
Для примера. (емнип - автор @Равиль Зарипов (ZuBy) ). Единая точка входа в функцию и отличаются только внутренности.
function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean; var {$IFDEF ANDROID} Intent: JIntent; {$ENDIF} {$IFDEF IOS} NSU: NSUrl; {$ENDIF} {$IFDEF MSWINDOWS} Res: HINST; {$ENDIF} begin {$IFDEF ANDROID} // There may be an issue with the geo: prefix and URLEncode. // will need to research Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL)))); try TAndroidHelper.Activity.startActivity(Intent); exit(true); except on e: Exception do begin if DisplayError then TDialog.ShowMessage('Error: ' + e.Message); exit(False); end; end; {$ENDIF} {$IFDEF IOS} // iOS doesn't like spaces, so URL encode is important. NSU := StrToNSUrl(URL); if SharedApplication.canOpenURL(NSU) then exit(SharedApplication.OpenURL(NSU)) else begin if DisplayError then TDialog.ShowMessage('Error: Opening "' + URL + '" not supported.'); exit(False); end; {$ENDIF} {$IFDEF MSWINDOWS} Res := ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOW); Result := Res > 32; {$ENDIF} end; И теперь "снаружи" этой функции вам без разницы, под какую платформу идет сборка. В любом случае вы пишете "OpenURL('http://blablabla.net');". Безо всяких IFDEF.
-
#WAMACO отреагировална x11 в Цикл по unicode строке
В общем, оказалось, что "'CharInSet' is deprecated: 'Use TCharHelper functionality'"
Правильно вот так:
uses System.Character; ... ... for ch in s do if ch.IsInArray(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then result := result + ch; или "IsDigit" если нужны только цифры for ch in s do if ch.IsDigit then result := result + ch; http://docwiki.embarcadero.com/Libraries/XE7/en/System.Character.IsDigit
-
#WAMACO отреагировална ENERGY в AdHoc
И еще момент, если у вас появляется ошибка
error: unable to find utility “PackageApplication”, not a developer tool or in PATH
Она лечиться очень просто - нужно всего лишь скопировать один файл на MacOs.
Таким образом у меня все работает (создается подписанный файл IPA) на Xcode 9.1, Delphi Berlin Update 1.
Скачиваем и распаковываем файл с аттача, и копируем его в MacOs в папку Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
Applications/Xcode.app//Contents - означает что нужно нажать правую кнопку и выбрать меню Contents. Не забудьте сделать полный Build, а затем Deploy.
Тот же ответ дублируется здесь: https://stackoverflow.com/questions/43068608/xcrun-error-unable-to-find-utility-packageapplication-not-a-developer-tool
PackageApplication.zip
-
#WAMACO отреагировална kami в Убить поток TThread кроссплатформено
С каких пор в Delphi перестали существовать TCriticalSection, TMutex, TEvent? Которые, кстати, работают кроссплатформенно, используя штатные средства, предоставляемые ОС.
-
#WAMACO отреагировална Alex7wrt в Локальная рация, Android, пример
Сделал простой пример приложения рации в локальной сети под Android. Реализация через UDP.
Буду рад, если кому окажется полезным.
Для начала/окончания сеанса связи нужно нажать на окружность
Для проверки нужно 2 телефона
unit Unit5; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdGlobal, IdSocketHandle, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, AndroidApi.JNI, AndroidApi.Helpers, FMX.Objects, System.Math; type TForm1 = class(TForm) Circle: TCircle; procedure ServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure FormCreate(Sender: TObject); procedure CircleTap(Sender: TObject; const Point: TPointF); end; TSendThread = class(TThread) protected procedure Execute; override; end; var Form1: TForm1; SendThread: TSendThread; Server: TIdUDPServer; audioRecord: JaudioRecord; audiotrack: JAudioTrack; recording: boolean; buffer_Size, port,ch_in, ch_out, format, freq, source: integer; implementation {$R *.fmx} procedure TSendThread.Execute; var buffer: TJavaArray<Byte>; begin buffer := TJavaArray<Byte>.create(buffer_size); while recording do begin audioRecord.read(buffer,0,buffer_size); Server.Broadcast(TIDBytes(TJavaArrayToTBytes(buffer)),port); end; buffer.Free; end; procedure TForm1.CircleTap(Sender: TObject; const Point: TPointF); begin recording:= not recording; if recording then begin Circle.Fill.Color:=TAlphaColors.Red; Server.OnUDPRead:=nil; audiorecord.startRecording; SendThread:=TSendThread.Create; end else begin Circle.Fill.Color:=TAlphaColors.Gray; audiorecord.stop; Server.OnUDPRead:=ServerUDPRead; end; end; procedure TForm1.FormCreate(Sender: TObject); begin buffer_size:=2048; freq:=8000; port:=5555; Server:=TIdUdpServer.Create(Form1); with Server do begin BufferSize:=buffer_size; DefaultPort:=port; BroadCastEnabled:=true; Active:=true; OnUDPRead:=ServerUDPRead; end; Circle.Width:=min(Screen.Width,Screen.Height)*0.7; Circle.Height:=Circle.Width; ch_in:=TJAudioFormat.JavaClass.CHANNEL_IN_MONO; ch_out:=TJAudioFormat.JavaClass.CHANNEL_OUT_MONO; format:=TJAudioFormat.JavaClass.ENCODING_PCM_16BIT; source:=TJMediaRecorder_AudioSource.JavaClass.MIC; audioRecord := TJAudioRecord.JavaClass.init(source, freq, ch_in, format, buffer_size); audiotrack:=TJAudioTrack.JavaClass.init(3, freq, ch_out, format, buffer_size,1); end; procedure TForm1.ServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin audiotrack.write(TBytesToTJavaArray(TBytes(AData)),0,Length(AData)); audiotrack.play; end; end.
radio.zip
-
#WAMACO получил реакцию от AngryOwl в Уничтожение TFrame
Передавать Frame надо по ссылке, вот так:
FreeFrame(var Frame: TFrame);
-
#WAMACO получил реакцию от OnePeople в DX - minus (Win приложение для скачивания минусовок)
При запуске пишет "Сервер возвратил ссылку" и приложение закрывается!
-
#WAMACO отреагировална RoschinSpb в [Delphi Berlin FMX Win32] Как реализовать двойной клик на ячейке в StringGrid?
Потому, что Х3 как определить то, что находится в гриде под курсором (обычная ячейка, недоступная ячейка, редактор ячейки, заголовок, пустое место), особенно в момент скроллирования на телефоне где и мыши-то нет. И ХЗ когда менять выделенную ячейку до срабатывания события, после срабатывания события, после первого клика, или после второго. И ХЗ как реагировать самому гриду на клик, если пользователь сам уже что-то сделал...
Поэтому в дизайнер введены другие события например OnSelectCell, OnCellDblClick, которые срабатывают в таком порядке
OnSelectCell
OnSelChanged
OnCellClick
OnCellDblClick
-
#WAMACO отреагировална Fedor K в Через NetHTTPClient передать фотографию на сервер
Не совсем верно. При использовании Indy нужно к проекту подключать библиотеки (libcrypto.so, libssl.so) для Android и (libcrypto.a, libssl.a)iOS. Пример для A есть на форуме. Для iOS такие же телодвижения, библиотеки например здесь.
После всего это приложения прекрасно проходят проверки маркетов. Но все это добавляют лишнее телодвижения, размер приложения раздувается. И я бы рекомендовал использовать нативные компоненты, где это возможно.
-
#WAMACO отреагировална Fedor K в TWebBrowser и неверный ssl сертификат на сайте.
Objective-C конечно весьма специфический... Попробовал несколько методов, но решение действительно очень простое:
1. Меняем iOSapi.Foundation.pas:
unit iOSapi.Foundation; //~3855 строка, добавляем 2 метода NSURLRequestClass = interface(NSObjectClass) ['{A93A4D14-529E-41F0-86EC-B570715512BB}'] {class} function requestWithURL(URL: NSURL): Pointer; cdecl; overload; {class} function requestWithURL(URL: NSURL; cachePolicy: NSURLRequestCachePolicy; timeoutInterval: NSTimeInterval): Pointer; cdecl; overload; //метод раз {class} function allowsAnyHTTPSCertificateForHost(host: NSString): Boolean; cdecl; overload; //метод два {class} procedure setAllowsAnyHTTPSCertificate(allow: Boolean; forHost: NSString); cdecl; overload; end; 2. В своем коде для требуемых сайтов пишем следующее:
TNSURLRequest.OCClass.setAllowsAnyHTTPSCertificate(true, StrToNSStr(<требуемый сайт>)); Проверял на сайте expired.badssl.com, XCode 7 + SDK 9.3, Simulator, также на реальном устройстве с iOS 11.
п.с. Если нужно доверять абсолютно всем сайтам, думаю можно п. 2 вставить в FMX.WebBrowser.Cocoa.pas в методе:
procedure TCommonWebBrowserService.DoNavigate(const URL: string);
-
#WAMACO отреагировална kami в Вызов TPopup ломает поведение TWebBrowser
Апну тему.
На этот раз - Tokio upd1, с патчем под iOS11.
Что требуется: скопировать в папку с проектом (рядом с dpr) файл FMX.WebBrowser.pas. В нем внести изменения в метод TCustomWebBrowser.FormHandleCreated, чтобы он выглядел следующим образом:
procedure TCustomWebBrowser.FormHandleCreated(const Sender: TObject; const Msg: TMessage); function GetParentForm(Control: TFmxObject): TCommonCustomForm; begin if (Control.Root <> nil) and (Control.Root.GetObject is TCommonCustomForm) then Result := TCommonCustomForm(Control.Root.GetObject) else Result := nil; end; var WBService : IFMXWBService; begin if not (csDesigning in ComponentState) and ((FWeb = nil) or (Sender = GetParentForm(self as TFmxObject))) and TPlatformServices.Current.SupportsPlatformService(IFMXWBService, WBService) then begin WBService.DestroyWebBrowser(FWeb); // добавлена эта строка. FWeb := WBService.CreateWebBrowser; FWeb.SetWebBrowserControl(Self); FWeb.UpdateContentFromControl; FWeb.URL := FURL; FWeb.Navigate; end; end; Что дает правка:
допустим, у вас есть WB на главной форме и на дочерней форме (или фрейме - без разницы), которая создается / уничтожается динамически. При создании вторичной формы метод FormHandleCreated вызывается дважды, при этом FWeb, созданный в первом вызове просто забывается, но не уничтожается (сильная ссылка в списке веббраузеров в WBService). Дальше вторичная форма уничтожается (захватывая с собой FWeb, созданный при втором вызове FormHandleCreated ), а в "забытом" FWeb остаются невалидные ссылки на родителя. Что при вызове метода TWBFactoryService.RealignBrowsers (активация / изменение размеров формы) приведет к AV.
Внесенное изменение удаляет FWeb из списка WBService, и в дальнейшем ничего не мешает его спокойному уничтожению.
-
#WAMACO получил реакцию от Вольдемар в Вызов TPopup ломает поведение TWebBrowser
Тот случай, когда нужно перейти на Tokyo