Евгений Корепов

Пользователи
  • Публикаций

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

  • Посещение

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

    54

Евгений Корепов стал победителем дня 7 января

Евгений Корепов имел наиболее популярный контент!

Информация о Евгений Корепов

  • Звание
    Продвинутый пользователь
  • День рождения 22 июля

Информация

  • Пол
    Мужчина
  • Город
    Ухта

Посетители профиля

2 225 просмотров профиля
  1. Прошу прощения, я ввел вас в заблуждение (тестировал на одном своем проекте). Открытие подобных ссылок вы должны делать самостоятельно, обрабатывая событие браузера ShouldStartLoadWithRequest. Вот код: uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, {$IFDEF ANDROID} Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, {$ENDIF ANDROID} FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, FMX.WebBrowser, FMX.Controls.Presentation; ..... const ConstMainURL = 'http://www.docme.ru/contacts'; .... procedure THeaderFooterForm.WebBrowser1ShouldStartLoadWithRequest( ASender: TObject; const URL: string); begin if Not URL.StartsWith(ConstMainURL) then // Если ссылка перехода отличается от базовой, то открываем ее через активити begin WebBrowser1.Stop; OpenURL(URL); end; end; procedure THeaderFooterForm.OpenURL(const AUrl: string); {$IFDEF ANDROID} var Uri: Jnet_Uri; OpenLinkIntent: JIntent; {$ENDIF ANDROID} begin {$IFDEF MSWINDOWS} ShellExecute(0, 'open', PChar(AUrl), nil, nil, SW_SHOWNORMAL); {$ENDIF MSWINDOWS} {$IFDEF ANDROID} Uri := StrToJURI(AUrl); OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri); TAndroidHelper.Activity.startActivity(OpenLinkIntent); {$ENDIF ANDROID} end; И прикрепляю ваш проект с моими изменениями WebPrj.zip
  2. На 10.3 отлично работает. Скиньте тестовый проект, проверю, может ошибка в чем то другом?
  3. Евгений Корепов

    Работа с атрибутами текста

    Век живи, век учись. Спасибо, не знал о такой возможности. Поигрался в тестовом проекте - все действительно работает.
  4. Все отлично обрабатывается и открывается. Любой браузер по определению должен это делать. У вас должна быть правильная ссылка на электронную почту, в примеру <a href="mailto:putin@russia.gov">Напишите письмо президенту</a> P.S. Или так, если хотите видеть адрес <a href="mailto:putin@russia.gov">putin@russia.gov</a>
  5. Евгений Корепов

    TMemo для вывода лога тормозит

    С GlobalUseDirect2D := false; приложение и должно грузить процессор, вы же явно указываете что рисуем только процессором. Возможно стоит подумать о реализации приложения в VCL? Или пересмотреть архитектуру приложения? Я бы на вашем месте пошел одним из трех путей: 1. Лить логи в отдельный TStringList, и использовать Memo в качестве "окна" для просмотра содержимого TStringList. Ограничить количество строк в Мемо к примеру сотней и с помощью контролов и кода дать возможность гонять это "окно" по содержимому TStringList. Этот метод я использовал в одном приложении, которое должно было работать месяцами, с большим количеством логов. Метод вполне себя оправдал. Вот уважаемый krapotkin тоже намекал на примерно этот способ. 2. Отказался от Memo, все таки этот компонент предназначен для редактирования небольших текстов, а не скоростного вывода десятков тысяч строк логов. Посмотрите в строну ListView. Конечно для копирования части строки лога придется придумывать некий велосипед (к примеру по клику кидать строку в Edit/Memo и оттуда уже копировать). 3. Сделал бы отдельное приложение/систему для логов. К примеру основное приложение льет логи по TCP или UDP куда то в другое приложение (желательно на другом компьютере/хостинге, которое в свою очередь заточено по визуализацию исключительно логов. А лучше лить в sql базу как предложил уважаемый POV
  6. Евгений Корепов

    TMemo для вывода лога тормозит

    Все ваши проблемы решаются добавлением трех строчек в код: Перед началом работы, сразу задаем количество строк Memo.Lines.Capacity:=1000000; Мемо сразу зарезервирует в своем TStringList нужный объем. Это позволит сократить накладные расходы на добавление в несколько раз. Перед добавлением строк в Memo обязательно делаем Memo.BeginUpdate; Это отключит перерисовку и другие операции. После добавления строк в Memo обязательно делаем Memo.EndUpdate; Это отрисует все изменения которые мы произвели. Вот итоговый код (в форме еще глобальный счетчик FLinesCounter : Integer;): procedure TForm1.FormCreate(Sender: TObject); Var I : Integer; begin Memo.Lines.Capacity:=1000000; Timer.Interval:=10; FLinesCounter:=1; Memo.BeginUpdate; for I := 1 to 10000 do begin Memo.Lines.Add('Это тест ' + FLinesCounter.ToString); Inc(FLinesCounter); end; Memo.EndUpdate; end; procedure TForm1.Button1Click(Sender: TObject); begin Timer.Enabled:=True; end; procedure TForm1.Log(const AMessage : String); const ConsMaxLogSize = 50000; begin Memo.BeginUpdate; // while Memo.Lines.Count > ConsMaxLogSize do // Memo.Lines.Delete(0); Memo.Lines.Add(AMessage); Memo.GoToTextEnd; Memo.EndUpdate; end; procedure TForm1.TimerTimer(Sender: TObject); begin Log('Это тест ' + FLinesCounter.ToString); Inc(FLinesCounter); end; Код добавляет в Мемо 10 тысяч строк за примерно пол секунды. И добавление по таймеру 100 строк в секунду отнимает примерно 0% процессорного времени. Все будет работать без тормозов до разумного предела, при очень больший количествах строк вы столкнетесь с тормозами выделения памяти приложению, тут нужно будет использовать иные механизмы.
  7. Я бы на вашем месте создавал не картинку, а к примеру PDF, там не будет проблем с несколькими страницами
  8. Евгений Корепов

    Проигрывание стандартных звуковых эффектов Android

    Задался вопросом, нашел ответ, может кому пригодится. uses Androidapi.JNI.Media, Androidapi.Helpers, Androidapi.JNIBridge, AndroidApi.Jni.JavaTypes, Androidapi.JNI.GraphicsContentViewText; .... procedure TFormMain.PlaySoundEffects(const ASoundID : Integer; AVolume : Single = 1.0); var AudioObj: JObject; Audio: JAudioManager; begin AudioObj:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); Audio:= TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID); Audio.loadSoundEffects; Audio.playSoundEffect(ASoundID, AVolume); end; Константы звуковых эффектов тут https://developer.android.com/reference/android/view/SoundEffectConstants Правда у меня только звук "чпок" на всех константах. Но мне он и был нужен )
  9. Евгений Корепов

    Запуск приложения от PUSH-уведомления

    Подниму тему наверх. Кто нибудь пробовал это делать в 10.3 ? Что то перестала логика работать. Причем пуши висящие в шторке, теперь исчезают сами, при старте приложения. Толи поменялась логика работы то ли просто глюк. function TGCMPushService.GetStartupNotifications: TArray<TPushServiceNotification>; var LBundle: JBundle; begin LBundle := MainActivity.getStartupGCM; if LBundle <> nil then Result := TArray<TPushServiceNotification>.Create(TGCMPushServiceNotification.Create(LBundle)) else Result := nil; end; Вот тут MainActivity.getStartupGCM ВСЕГДА отдает NIL
  10. Евгений Корепов

    GCM исчез, теперь Firebase Cloud Messaging, но как?

    Спасибо огромное! Опять начал это делать, все забыл, каждый раз как заново ) Начал гуглить и тут раз - и моя же тебя с вашим ответом! Все помогло!
  11. Евгений Корепов

    [Android] TWebBrowser не обновляется прокрутка

    Добавьте простенький JS скрипт на вашу страницу (вот для примера две функции - скролл в самый низ и скролл наверх): <script> function ScrollToBottom() { window.scrollTo(0, document.body.scrollHeight); } function ScrollToTop() { window.scrollTo(0, 0); } </script> И в событии браузера запускайте procedure TFormMain.OnWebBrowserDidFinishLoad(ASender: TObject); begin try FWB.EvaluateJavaScript('ScrollToTop()'); except end; end;
  12. Евгений Корепов

    Firedac+База ms access + android можно?

    Как то это сделать можно, потому как существуют готовые приложения типа https://play.google.com/store/apps/details?id=com.kmsoft.access_db_viewer , но подозреваю что нужно полностью с нуля писать ручками свой DB провайдер для access
  13. Евгений Корепов

    Доступ к SharedDocumentsPath

    http://docwiki.embarcadero.com/RADStudio/Rio/en/Android_Permission_Model
  14. Евгений Корепов

    THTTPClient - Ошибка запроса

    А лучше перейдите на Токио - она же теперь вроде бесплатная?
  15. Евгений Корепов

    THTTPClient - Ошибка запроса

    Действительно, проверил на XE8 - есть ошибка. И в Berlin тоже она есть. Исправлена только в Tokyo 10.2.3. Но просто надо поправить исходник, сегодня посмотрю в чем там дело....