Евгений Корепов
-
Постов
738 -
Зарегистрирован
-
Посещение
-
Победитель дней
100
Активность репутации
-
Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе
Обновленная версия, кое что подправил теперь нет ошибки на IOS 64 bit
результат (Android, IPhone 4S, IPhone 6, MacOS Yosemite на виртуалке, Windows 10)
Добавлена функция isGPSActive [ANDROID], определяет включен ли сенсор на устройстве
DeviceInfo.zip
-
Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе
DeviceInfo - модуль для получения информации о девайсе
Android || Windows || IOS || MAC OS
Intel планшет
для Андроида нужно включить разрешения (permission)
Ссылка на GitHub
-
Евгений Корепов отреагировална rareMax в [TidTCPClient] В IdTCPClient возникает Max line length exceeded при чтении
Для начала - я бы попробовал обновить инди. Та версия, что поставляется с Делфи - немного отстает. Постоянно выходят багфиксы. Скачать последнюю версию можно с помошью SVN клиента(ваш любимый либо встроенный в ИДЕ): https://svn.atozed.com:444/svn/Indy10 Имя: Indy-Public-RO пароль пустой оставь
-
Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в Клонирование TListView
я пользуюсь первым вариантом, создаю такого плана record и использую его для разных вариантов отрисовок
TmyListViewDrawer = record procedure PaintBitmaps(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); // динамическая отрисовка картинок procedure PaintHorzBitmaps(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); // динамическая отрисовка картинок (горизонтально LV) procedure RestoranDrawer(const Sender: TObject; const AItem: TListViewItem); // отрисовка плиточки // настройка LV class procedure RestoranConfig(aLV: TListView); static; class procedure BludoConfig(aLV: TListView); static; class procedure MenuConfig(aLV: TListView); static; // ... class procedure RestoranAdd(aLV: TListView; const aTitle, aLocation, aURL: string; const aDistance, aRating: Real; const aMinPrice, aDeliveryPrice, aDeliveryTime: integer; const aSale: Boolean); static; // добавление Itema end; плюс в том что можно потом копировать в другие проекты, просто дополняя. а не сидеть и настраивать руками
-
Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в Исключить устройства с Intel Atom как не поддерживаемые
точно могу сказать только про HTTP/S, TCP, Location Sensor, Map, воспроизведение звука
еще вспомнилось что с камерой был косяк, но детали не вспомню.
-
Евгений Корепов отреагировална ElenaS. в Просмотрщик готовых отчетов FastReport FMX
После нескольких звонков в наш офис, мы узнали, что некоторые гос. структуры (соцстрах, пенсионный фонд) выдают пользователям документы в .fp3, и эти пользователи были озадачены: просматривать их было нечем. Такую несправедливость вынести мы не смогли и выпустили новый просмотрщик для готовых отчетов.
FR Viewer может просматривать/печатать файлы .fp3. В этом формате работают сразу два наших продукта: FastReport VCL и FastReport FMX. Но если с VCL просмотрщик работал и до этого, то FMX до этого момента просматривать было нечем. Viewer автоматически определяет версию .fp3 между VCL/FMX и запускает соответствующий просмотр.
Доступен для платформ Windows и MacOS и абсолютно бесплатен.
Скачать можно тут: https://www.fast-report.com/en/download/fast-report-viewer/
-
Евгений Корепов получил реакцию от privet20044 в [Android] Как убрать "Вставить" и подчеркивание при фокусе?
Быть такого не может. Отладкой проверяли? Может у вас срабатывает на if Assigned(FClipboardSvc) then и ничего не выполняется.
В главной форме не забудьте FClipboardSvc: IFMXClipboardService;
и потом:
procedure TFormMain.FormCreate(Sender: TObject); begin if not TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(FClipboardSvc)) then FClipboardSvc := nil; ... -
Евгений Корепов получил реакцию от privet20044 в [Android] Как убрать "Вставить" и подчеркивание при фокусе?
Избежать появления кнопки Вставить можно очисткой буфера обмена.
Например так:
procedure TFormMain.Edit1CanFocus(Sender: TObject; var ACanFocus: Boolean); begin if Assigned(FClipboardSvc) then FClipboardSvc.SetClipboard(''); ACanFocus:=True; end; Обратите внимание что именно пустая строка очищает буфер, попытка сделать FClipboardSvc.SetClipboard(Nil); поместит в буфер строку 'empty'.
-
Евгений Корепов отреагировална AngryOwl в Поворот стрелки как на часах
вдогонку, кому интересно
SampleCPUUsage.zip
-
Евгений Корепов получил реакцию от Kitty в Действие при открытии через Push-cообщение [Android]
Как то так: procedure TFormMain.NotificationCenterReceiveLocalNotification(Sender: TObject; ANotification: TNotification); begin If ANotification.Name.Equals('Взгляни на третью вкладку') Then TabControl.ActiveTab:=TabItem3; NotificationCenter.CancelNotification(ANotification.Name); end; -
Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в [Android] [6.0] Не удается загрузить SSL библиотеку
не думаю беда в этом, грешу на indy в RX10
Сегодня попробую откомпилить на XE8 под 6ку
UPDATE:
XE8 приложение вылетает сразу, try except end не реагирует
в модуле System.pas (RX 10) значительно переработан код
Дебаг выдаёт, что загрузка этих библиотек происходит
-
Евгений Корепов отреагировална avenger_msoft в [Windows] TnTRayIcon не визуальный компонент обеспечивающий управление значком в области System Tray
Переделаный компонет VCL TTrayIcon
FMX.TrayIcon.Win.zip
-
Евгений Корепов отреагировална ivadimos в [Android] Как очистить буфер обмена в С++ Builder XE7?
Тоже столкнулся с такой проблемой.
Решил таким образом:
var а: IFMXClipBoardService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXClipBoardService, Service) then var а: IFMXClipBoardService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXClipBoardService, Service) then Service.SetClipboard('');
-
Евгений Корепов отреагировална sviat9440 в Виртуальная клавиатура
Выкладываю свой проект виртуальной клавиатуры на FMX.
example_virtual_keyboard.zip
-
Евгений Корепов получил реакцию от Равиль Зарипов (ZuBy) в Установка ScrollViewPos после добавления ListViewItem
Вы будете смеяться, но проблема решена. Методом научного тыка.
Не работающая установка значения ListView.ScrollViewPos решается следующей строкой ListView.ItemIndex:=0; (Не важно 0 или любое другое число).
Т.е. для того чтоб заработало делаем так:
ListView.ItemIndex:=0; ListView.ScrollViewPos:=333; // Ура, работает!!! Почему так работает, я не понял.
-
Евгений Корепов получил реакцию от Равиль Зарипов (ZuBy) в Как создать хелперы для массива?
Вот здесь посмотрите https://code.google.com/p/delphi-foundations/source/browse/trunk/Book/06.+Arrays,+collections+and+enumerators/Simple+search+%28TArray+class+helper%29/CCR.Generics.SimpleArraySearch.pas?r=29
-
Евгений Корепов получил реакцию от rareMax в Как создать хелперы для массива?
Вот здесь посмотрите https://code.google.com/p/delphi-foundations/source/browse/trunk/Book/06.+Arrays,+collections+and+enumerators/Simple+search+%28TArray+class+helper%29/CCR.Generics.SimpleArraySearch.pas?r=29
-
Евгений Корепов получил реакцию от AngryOwl в Получить размер файла
Ура! Я победил проблему. Причем с помощью почти забытой мной процедуры FindFirst ;-) Код работает корректно под Windows и Android. Файл не передергивается, антивирус спокоен.
function TFileManager.GetFileSize(APath : String) : String; Var AFileSizeByte : Int64; AFileSizeFloat : Double; SearchRec : TSearchRec; FileAttrs: Integer; begin FileAttrs :=faArchive; FileAttrs := FileAttrs + faAnyFile; Result:='unknow'; AFileSizeByte:=0; try FindFirst(APath,FileAttrs,SearchRec); AFileSizeByte:=SearchRec.Size; FindClose(SearchRec); except Exit; end; if AFileSizeByte<1024 then begin Result:=Format('%d',[AFileSizeByte])+' Byte'; Exit; end; if AFileSizeByte<1048576 then begin AFileSizeFloat:=AFileSizeByte/1024; Result:=Format('%6.3f',[AFileSizeFloat])+' KByte'; Exit; end; if AFileSizeByte<1073741824 then begin AFileSizeFloat:=AFileSizeByte/1048576; Result:=Format('%6.3f',[AFileSizeFloat])+' MByte'; Exit; end; AFileSizeFloat:=AFileSizeByte/1073741824; Result:=Format('%6.3f',[AFileSizeFloat])+' GByte'; end; -
Евгений Корепов получил реакцию от Vitaldj в Получить размер файла
Ура! Я победил проблему. Причем с помощью почти забытой мной процедуры FindFirst ;-) Код работает корректно под Windows и Android. Файл не передергивается, антивирус спокоен.
function TFileManager.GetFileSize(APath : String) : String; Var AFileSizeByte : Int64; AFileSizeFloat : Double; SearchRec : TSearchRec; FileAttrs: Integer; begin FileAttrs :=faArchive; FileAttrs := FileAttrs + faAnyFile; Result:='unknow'; AFileSizeByte:=0; try FindFirst(APath,FileAttrs,SearchRec); AFileSizeByte:=SearchRec.Size; FindClose(SearchRec); except Exit; end; if AFileSizeByte<1024 then begin Result:=Format('%d',[AFileSizeByte])+' Byte'; Exit; end; if AFileSizeByte<1048576 then begin AFileSizeFloat:=AFileSizeByte/1024; Result:=Format('%6.3f',[AFileSizeFloat])+' KByte'; Exit; end; if AFileSizeByte<1073741824 then begin AFileSizeFloat:=AFileSizeByte/1048576; Result:=Format('%6.3f',[AFileSizeFloat])+' MByte'; Exit; end; AFileSizeFloat:=AFileSizeByte/1073741824; Result:=Format('%6.3f',[AFileSizeFloat])+' GByte'; end; -
Евгений Корепов отреагировална Равиль Зарипов (ZuBy) в ListView Color Helper
Привет Всем!
Много тем на форуме про раскраску TListView, нашел в интернете решение и доработал его
Вот что получилось
LV_Helper.zip ColorListView.zip
Доступно для Seattle
ListView1.SetColorItemSelected(TAlphaColorRec.Orangered); //выделенный ListView1.SetColorItemFill(TAlphaColorRec.Gray); // обычный цвет Item ListView1.SetColorItemFillAlt(TAlphaColorRec.Lightgrey); // альтернативный цвет Item ListView1.SetColorBackground(TAlphaColorRec.Black); // цвет самого TListView ListView1.SetColorItemSeparator(TAlphaColorRec.Lightgray); // Линия разделения Item'ов ListView1.SetColorText(TAlphaColorRec.Red); // Обычный текст ListView1.SetColorTextSelected(TAlphaColorRec.White); // выделенный текст ListView1.SetColorTextDetail(TAlphaColorRec.Yellow); // текст доп. инфы ListView1.SetColorTextHeader(TAlphaColorRec.Green); // текст заголовка ListView1.SetColorTextHeaderShadow(TAlphaColorRec.Lightgray); // тень текста ListView1.SetColorButtonText(TAlphaColorRec.Orange); // цвет текста кнопки ListView1.SetColorButtonTextPressed(TAlphaColorRec.Orangered); // цвет нажатой кнопки добавлено в Berlin
ListView1.SetColorPullRefresh(TAlphaColorRec.Orange); ListView1.SetColorPullRefreshIndicator(TAlphaColorRec.Orangered); ListView1.SetColorStretchGlow(TAlphaColorRec.Lime); ModernListView.rar
-
Евгений Корепов отреагировална xenon54 в Смена родительского компонента для аниматора
procedure TForm2.MoveRect(Rect: TRectangle); begin TAnimator.AnimateIntWait(Rect, 'Position.Y', 0); TAnimator.AnimateInt(Rect, 'Position.Y', 152); end; Так вас не устроит?
-
Евгений Корепов получил реакцию от rustam_d в Push сообщение для одного конкретного клиента
{ "registration_ids": [ "APA91bFwDgtPtlwgvbgVt7qpxqes0UIi...", "APA91bFS3fknVDY6qifQiJ1KZDSjwZE..." ], "data": { "title": "Заголовок сообщения", "message": "Текст сообщения" } } -
Евгений Корепов отреагировална Belov.V. в Отправка файлов через намерение
Goggle Drive в качестве имени ставит то, что указано в Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment));
Т.е. прописывайте в это поле имя файла без пути,
Mail.ru не пробовал.
-
Евгений Корепов получил реакцию от rakhmet в Сообщения чата в виде сообщений в iphone.
Для одного проекта писал такое пару месяцев назад, пользуйтесь.Под windows, при клике на сообщение, оно превращается в readonly TMemo - дабы можно было скопировать нужное из сообщения. При наличии URL в сообщении, сбоку появляется кнопка открыть - лучше ничего для открытия ссылок не придумал. Надо бы сделать диалог выбора для открытия одной из нескольких ссылок, но руки пока не доходят. Пощупать чат вживую можно в приложении https://play.google.com/store/apps/details?id=ru.flintnet.InternetAgent , для активации и загрузки примера чата отсканируйте приложением qr-код с страницы http://internetagent.flintnet.ru/
unit ChatBox; interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Layouts,System.Types, FMX.StdCtrls,FMX.Edit,FMX.Memo,FMX.TextLayout,System.UITypes,FMX.Graphics,FMX.Objects, FMX.Effects,FMX.Styles.Objects; type TMessagePos = (msgLeft,msgRight); TEventText = procedure(PURL: String) of object; TChatBox = class(TVertScrollBox) private FTextLyout : TTextLayout; FLastMessageId : Integer; FMsgWidthPercentage : Integer; FOnURLButtonClick : TEventText; FCalloutLength : Single; FCalloutXRadius : Single; FCalloutYRadius : Single; FMessageFontSize : Single; FMemo : TMemo; procedure ButtonClick(Sender: TObject); procedure MyMsgContainerOnClick(Sender: TObject); procedure MyMsgContainerOnExit(Sender: TObject); function FCreateMsgBlock(AOwner: TComponent; PMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos) : TLayout; function CalculateTextItemHeight(Sender: TObject) : Single; procedure LayoutResize(Sender: TObject); function ExtractURL(pString : String) : String; procedure Memo1ApplyStyleLookup(Sender: TObject); public property LastMessageId : Integer read FLastMessageId; property MsgWidthPercentage : Integer read FMsgWidthPercentage write FMsgWidthPercentage default 80; constructor Create(AOwner: TComponent); override; destructor Destroy; override; Procedure AddMessage(pMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos); procedure ClearChildren(AChatBox: TChatBox); procedure ScrollBottomSmoothly; procedure ScrollBottom; published property OnURLButtonClick : TEventText read FonURLButtonClick write FonURLButtonClick; property CalloutLength : Single read FCalloutLength write FCalloutLength; property CalloutXRadius : Single read FCalloutXRadius write FCalloutXRadius; property CalloutYRadius : Single read FCalloutYRadius write FCalloutYRadius; property MessageFontSize : Single read FMessageFontSize write FMessageFontSize; end; TOpenChatBox = class(TChatBox); Procedure Register; implementation procedure Register; begin RegisterComponents('EKorepov', [TChatBox]); end; constructor TChatBox.Create(AOwner: TComponent); begin inherited create(Aowner); FLastMessageId:=-1; FTextLyout := TTextLayoutManager.DefaultTextLayout.Create; FMemo:=TMemo.Create(Aowner); FMemo.TextSettings.WordWrap:=True; FMemo.ReadOnly:=True; FMemo.Align:=TAlignLayout.Client; FMemo.OnExit:=MyMsgContainerOnExit; FMemo.OnApplyStyleLookup:=Memo1ApplyStyleLookup; FMemo.StyledSettings:=FMemo.StyledSettings-[TStyledSetting.Size]; With Self as TVertScrollBox do begin AniCalculations.Animation := True; AniCalculations.BoundsAnimation := True; AniCalculations.TouchTracking := [ttVertical]; end; end; destructor TChatBox.Destroy; begin FreeAndNil(FMemo); FreeAndNil(FTextLyout); inherited Destroy; end; procedure TChatBox.ScrollBottomSmoothly; begin AniCalculations.MouseWheel(0, ContentBounds.Height+5); end; procedure TChatBox.ScrollBottom; begin ScrollBy(0, -ContentBounds.Height); end; procedure TChatBox.ButtonClick(Sender: TObject); Var URL : String; begin URL:=TButton(Sender).HelpKeyword; if Assigned(FonURLButtonClick) then FonURLButtonClick(URL); end; procedure TChatBox.Memo1ApplyStyleLookup(Sender: TObject); begin end; procedure TChatBox.MyMsgContainerOnClick(Sender: TObject); begin FMemo.TextSettings:=TLabel(Sender).TextSettings; FMemo.Lines.Text:=TLabel(Sender).Text; TLabel(Sender).AddObject(FMemo); end; procedure TChatBox.MyMsgContainerOnExit(Sender: TObject); begin if (Sender is TMemo) then if Assigned(TMemo(Sender).Parent) then if (TMemo(Sender).Parent is TLabel) then TLabel(TMemo(Sender).Parent).RemoveObject(TMemo(Sender)); end; procedure TChatBox.ClearChildren(AChatBox: TChatBox); begin Assert(AChatBox <> nil); TOpenChatBox(AChatBox).Content.DeleteChildren; AChatBox.Repaint; end; function TChatBox.CalculateTextItemHeight(Sender: TObject) : Single; var Item: TLabel; begin Result:=0; if (Sender is TLabel) then begin Item := TLabel(Sender); FTextLyout.BeginUpdate; try FTextLyout.Text := Item.Text; FTextLyout.MaxSize := TPointF.Create(Item.Width-Item.Margins.Left-Item.Margins.Right-10, 1000); FTextLyout.Font := Item.Font; FTextLyout.WordWrap:= Item.WordWrap; FTextLyout.HorizontalAlign:= Item.TextSettings.HorzAlign; FTextLyout.VerticalAlign:= Item.TextSettings.VertAlign; finally FTextLyout.EndUpdate; end; Result:= FTextLyout.Height+10; end; end; procedure TChatBox.LayoutResize(Sender: TObject); Var Item : TLabel; CalloutRectangle : TCalloutRectangle; Layout : TLayout; I : Integer; begin Layout:=TLayout(Sender); for I := 0 to Layout.Children.Count-1 do begin If Layout.Children.Items[I] is TCalloutRectangle Then begin CalloutRectangle:=TCalloutRectangle(Layout.Children.Items[I]); Item:=TLabel(CalloutRectangle.Children.Items[0]); CalloutRectangle.Width:=(Layout.Width / 100) * FMsgWidthPercentage; Layout.Height:=CalculateTextItemHeight(Item); end; If Layout.Children.Items[I] is TButton Then begin TButton(Layout.Children.Items[I]).Width:=(Layout.Width / 100) * (100-FMsgWidthPercentage-5); end; end; end; Procedure TChatBox.AddMessage(pMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos); Var lcLayout : TLayout; begin PDate:=Trim(PDate); PAutor:=Trim(PAutor); PMessage:=Trim(PMessage); FLastMessageId:=PMessageId; lcLayout:=FCreateMsgBlock((Self as TVertScrollBox), PMessageId, PDate, PAutor, PMessage, PMessagePos); Self.AddObject(lcLayout); end; function TChatBox.FCreateMsgBlock(AOwner: TComponent; PMessageId : Integer; PDate, PAutor, PMessage : String; PMessagePos : TMessagePos) : TLayout; Var lcLayout,lcLayout2 : TLayout; Item : TLabel; Button : TButton; CalloutRectangle : TCalloutRectangle; lcHeight : Single; URL : String; begin lcLayout:=TLayout.Create(AOwner); lcLayout.Tag:=pMessageId; lcLayout.Align:=TAlignLayout.Top; lcLayout.Width:=200; lcLayout.Position.X:=0; lcLayout.Position.Y:= ((AOwner as TVertScrollBox).ContentBounds.Height+10); lcLayout.Margins.Bottom:=10; CalloutRectangle:=TCalloutRectangle.Create(lcLayout); CalloutRectangle.XRadius:=FCalloutXRadius; CalloutRectangle.YRadius:=FCalloutYRadius; CalloutRectangle.CalloutWidth:=10; CalloutRectangle.CalloutOffset:=-3-FCalloutYRadius-CalloutRectangle.CalloutWidth; CalloutRectangle.Width:=((AOwner as TVertScrollBox).Width / 100) * FMsgWidthPercentage; CalloutRectangle.HitTest:=False; case PMessagePos of msgRight : begin CalloutRectangle.Align:=TAlignLayout.Right; CalloutRectangle.CalloutPosition:=TCalloutPosition.Right; CalloutRectangle.Padding.Right:=CalloutRectangle.CalloutLength+CalloutRectangle.XRadius; CalloutRectangle.Padding.Left:=CalloutRectangle.XRadius; end; msgLeft : begin CalloutRectangle.Align:=TAlignLayout.Left; CalloutRectangle.CalloutPosition:=TCalloutPosition.Left; CalloutRectangle.Padding.Left:=CalloutRectangle.CalloutLength+CalloutRectangle.XRadius; CalloutRectangle.Padding.Right:=CalloutRectangle.XRadius; end; end; CalloutRectangle.Padding.Top:=1; CalloutRectangle.Padding.Bottom:=1; lcLayout.AddObject(CalloutRectangle); Item:=TLabel.Create(CalloutRectangle); Item.TextSettings.Font.Size:=MessageFontSize; CalloutRectangle.AddObject(Item); Item.Align:=TAlignLayout.Client; {$IFDEF MSWINDOWS} Item.OnClick:=MyMsgContainerOnClick; {$ENDIF MSWINDOWS} Item.Text:=PDate+' '+PAutor+#10+PMessage; Item.HitTest:=True; Item.WordWrap:=True; lcHeight:=CalculateTextItemHeight(Item); lcLayout.Height:=lcHeight; URL:=ExtractURL(pMessage); Item.StyledSettings:=Item.StyledSettings- [TStyledSetting.Size,TStyledSetting.Style]; if Not URL.IsEmpty then begin lcLayout2:=TLayout.Create(lcLayout); lcLayout2.Align:=TAlignLayout.Client; lcLayout2.Margins.Left:=5; lcLayout2.Margins.Right:=5; lcLayout.AddObject(lcLayout2); Button:=TButton.Create(lcLayout2); Button.Text:='Открыть'; Button.Align:=TAlignLayout.Center; Button.HelpKeyword:=URL; Button.OnClick:=ButtonClick; lcLayout2.AddObject(Button); end; lcLayout.OnResize:=LayoutResize; Result:=lcLayout; end; function TChatBox.ExtractURL(pString : String) : String; Var S : String; begin Result:=''; if Not pString.Contains('http') then Exit; S:=pString.Substring(Pos('http',pString)-1); S:=S.Remove(S.IndexOfAny([' ',','])); Result:=S.TrimRight(['.']); end; end. -
Евгений Корепов отреагировална alexbirukov в [Статья] PHP сервер для рассылки Push на Android и iOS
Ссылка на статью. Автор: Александр Бирюков В статья я максимально подробно попытался описать работу с PHP скриптом для рассылки Push сообщений из любой программы вне зависимости от платформы. Затрагивается вопроса от экспорта скриптов до кода программы: отправка и получение Push, регистрация устройств.
Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.