Таблица лидеров


Популярный контент

Показан контент с высокой репутацией за 21.01.2019 в Сообщения

  1. 4 балла
    sinuke

    [Android] Прозрачный StatusBar в RAD 10.3 Rio

    Привет Вчера была выпущена финальная версия RAD Studio 10.3 Rio, в которой много нововведений для Андройд. Но вот про статусбар снова "забыли". Хотя не совсем, добавили файлик styles-v21.xml, который превносит новую материальную тему на устройствах под управлением Android 5.0 и выше вместо устаревшей Holo. Но все равно свойство формы SystemStatusBar так и не реализовали. Поэтому при запуске статус бар будет окрашен в унылый серый цвет (см. скриншот). Для того, чтобы сделать статусбар прозрачным и поместить под него содержимое формы, то достаточно сделать несколько несложных шагов: 1. Убираем из деплоймента (Project -> Deployment) файл styles-v21.xml (можно просто снять галочку рядом с именем файла) 2. Добавить в деплоймент проекта новый файл styles-v21.xml (styles-v21.zip) и прописать ему путь res\values-v21\ 3. В результате получится следующий вид P.S. В новом файле по сравнению со стандартным добавилась строчка <item name="android:windowTranslucentStatus">true</item>, которая и отвечает за прозрачный статусбар P.P.S. Чтобы определять размер статус бара, все также можно воспользоваться решеним ZuBy - http://blog.rzaripov.kz/2016/12/android-ios.html P.P.P.S. Тестовый проектик - StatusBar.zip
  2. 2 балла
    Вот точно ничего не надо делать и тем более подключать. Эмбаркадера еще не дочитала новости гугля. Они пока еще за 2015 год переваривают ))))
  3. 2 балла
    у меня тоже нет никакой ошибки на рио. пример с ошибкой можно?
  4. 2 балла
    krapotkin

    Не срабатывает деструктор

    может, доки прочесть? в мобильных платформах используется ARC поэтому, пока есть хоть одна ссылка на объект, он не уничтожается зато, когда ссылок нет, он уничтожается самостоятельно вызов Delete для компонента нужен для сохранения кросс-платформенной совместимости в Windows он работает, в ARC - пустой а принудительный вызов деструктора скорее всего только навредит, ибо архитектурный косяк прикрывается костылем...
  5. 2 балла
    mmover

    Как перерисовать скролл?

    Если я правильно понял задачу, то так : procedure TForm2.VScrollPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color := TAlphaColors.Red; Canvas.FillRect(ARect,0,0,[],1); end; procedure TForm2.FormShow(Sender: TObject); begin Grid1.StylesData['vscrollbar.OnPaint'] := TValue.From<TOnPaintEvent>(VScrollPaint); end;
  6. 2 балла
    Alex7wrt

    Не получается запустить эмулятор

    Чтобы не было красного крестика, нужно не только создать эмулятор в AVD менеджере, но и запустить его там же. В итоге на экране увидите окно, в котором запускается интерфейс Android. Когда он запустится, и появится рабочий стол Android, можно запускать установку приложения на эмулятор. Только учтите, что на относительно слабых системах эмулятор может запускаться довольно долго. Ну и Вообще для проверки работоспособности (работает/ не работает) легче воспользоваться установкой на реальный девайс.
  7. 1 балл
    Rusland

    Webbrowser в Windows

    В ходе работы с js библиотекой leaflet столкнулся с проблемой некорректной работы стандартного веббраузера на виндоуз. Как известно компонент Webbrowser в Windows использует движок Internet Explorer. Но, как выяснилось, по умолчанию он работает в режиме совместимости IE6, даже если у вас установлена гораздо более новая версия. Для того чтобы заставить его работать в нужно вам режиме требуется внести правку в реестр: HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BROWSER_EMULATION Project1.exe = (DWORD) 0x00002710 (значения см. ниже) где Project1.exe - это название вашего приложения, а значения параметр принимает следующие: Value Description 11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11. 10001 (0x2711) Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive. 10000 (0x02710) Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10. 9999 (0x270F) Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 9000 (0x2328) Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9. Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. 8888 (0x22B8) Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 8000 (0x1F40) Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8 Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. 7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control. PS. лично мне помогло исправление ветки HKEY_CURRENT_USER и установка версии IE10 link
  8. 1 балл
    Евгений Корепов

    Отображение картинок в ListView

    Проблемы не существует в принципе. Пытался разобраться в коде, но из за его полной не читабельности, плюнул, все удалил а написал заново. Решил для забавы использовать анонимный поток для загрузки картинки. По кнопке все грузится и сразу отображается. Никаких костылей не используется (ну кроме как AListItemImage.OwnsBitmap:=True, но и без этого все работает). Прилагаю код и архив проекта: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, System.Net.HttpClient, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.ListView; const ListViewItemImageEmpy = -1; ListViewItemImageLoading = 0; ListViewItemImageLoaded = 1; type TForm1 = class(TForm) ListView1: TListView; Layout1: TLayout; Button1: TButton; procedure Button1Click(Sender: TObject); procedure ListView1UpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); procedure FormCreate(Sender: TObject); private { Private declarations } FListViewUpdating : Boolean; procedure LoadImage(const AItemIndex : Integer; AURL : String); public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin FListViewUpdating:=False; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; item:TListViewItem; begin listview1.ItemIndex:=0; listview1.ItemAppearance.ItemAppearance:='Custom'; listview1.ItemAppearanceObjects.ItemObjects.Accessory.Visible:=false; //Очистка ListView for i := Listview1.ItemCount-1 downto 0 do ListView1.Items.Delete(i); //Формирование нового списка for i := 1 to 10 do begin Item:=listview1.Items.Add; item.Height:=45; FListViewUpdating:=true; item.data['ImageURL']:='http://fire-monkey.ru/uploads/monthly_2016_03/5-icon-29796ebcb510717e74ed258822feb2cc.png.365100cc218fe330c717aa80384fa4aa.png'; Item.Data['ImageState']:=ListViewItemImageEmpy; FListViewUpdating:=false; item.Adapter.ResetView(item); end; end; procedure TForm1.LoadImage(const AItemIndex : Integer; AURL : String); Var AHTTPClient : THTTPClient; AHTTPResponse : IHTTPResponse; begin AHTTPClient:=THTTPClient.Create(); AHTTPResponse:=AHTTPClient.Get(AURL); AHTTPClient.Free; if AHTTPResponse.StatusCode <> 200 then exit; TThread.Synchronize(Nil, procedure Var AListItemImage : TListItemImage; begin AListItemImage:=TListItemImage(ListView1.Items.Item[AItemIndex].View.FindDrawable('s_image')); if Assigned(AListItemImage) then begin AListItemImage.Bitmap:=TBitmap.Create; AListItemImage.Bitmap.LoadFromStream(AHTTPResponse.ContentStream); end; end ); end; procedure TForm1.ListView1UpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); function SetupImageObject(const AName : String; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign) : TListItemImage; Var AImageState : Integer; AImageURL : String; AListItemImage : TListItemImage; begin AListItemImage:=TListItemImage(AItem.View.FindDrawable(AName)); if AListItemImage = Nil then begin AListItemImage:=TListItemImage.Create(AItem); AListItemImage.Name:=AName; AListItemImage.Bitmap:=Nil; AListItemImage.OwnsBitmap:=True; end; if AListItemImage.Bitmap=Nil then begin AImageState:=AItem.Data['ImageState'].AsInteger; if AImageState=ListViewItemImageEmpy then begin AImageURL:=AItem.Data['ImageURL'].AsString; if Not AImageURL.IsEmpty then begin AItem.Data['ImageState']:=ListViewItemImageLoading; TThread.CreateAnonymousThread( procedure begin LoadImage(AItem.Index, AImageURL); end).Start; end; end; end; AListItemImage.Width:=AWidth; AListItemImage.Height:=AHeight; AListItemImage.PlaceOffset.X:=X; AListItemImage.PlaceOffset.Y:=Y; AListItemImage.Align:=AAlign; AListItemImage.VertAlign:=AVertAlign; AListItemImage.ScalingMode:=TImageScalingMode.StretchWithAspect; AListItemImage.Visible:=True; Result:=AListItemImage; end; begin if FListViewUpdating then exit; SetupImageObject('s_image', 35, 35, 0 , 0, TListitemalign.Leading, TListItemAlign.Center); AHandled:=true; end; end. LoadBitmaps.zip
  9. 1 балл
    Я бы рекомендовал, как вам уже подсказывали, использовать готовые механизмы уведомлений. Или вариант с TNotificationCenter - над треем будет появляться окошко с вашим уведомлением, клик по окошку вы можете произвольно обработать в приложении. Этот механизм "написан по быстрому" через пень-колоду, просто создает окно, не пытаясь взаимодействовать с платформой. Или использовать родной механизм Windows - winapi Shell_NotifyIcon, тогда вы получите еще и уведомления в центре уведомлений Windows Второй способ можно использовать с помощью многочисленных компонентов TTrayIcon: procedure TForm1.SetNotification(const ATitle, AMessage : String); begin FTrayIcon.BalloonTitle:=ATitle; FTrayIcon.BalloonHint:=AMessage; FTrayIcon.ShowBalloonHint; end;
  10. 1 балл
    Скриншоты с планшета добавлены в ГуглПлей?
  11. 1 балл
    brunnengi

    Странный баг с TMultiView 2

    Кинь на форму Layount. Сделай HitTest = true; Когда MultiView "активен" выводи Layout поверх всех компонентов кроме Multiview. Делай Layout visile true, hittest=true, BringFront; Тогда если Нажимать "мимо" multiview то отрабатывать нажатие будет имено layout а не какой либо другой компонент
  12. 1 балл
    d7d1cd

    Не срабатывает деструктор

    Счётчик увеличивается на 2 потому что одну ссылку хранит владелец, а вторую указатель bi. Тут я не прав. Есть статья Бровина Ярослава. Там сказано, что каждый компонент с фокусом получает дополнительную ссылку. Я проверил, так происходит только тогда, когда при создании объекта указывается его владелец. Поэтому не указывай владельца при создании объекта. Владелец нужен только для автоматического удаления того, кем он владеет при удалении его самого. У тебя же не тот случай.
  13. 1 балл
    krapotkin

    Не срабатывает деструктор

    Причем сразу на 2 )) каюсь, я не стал выяснять почему
  14. 1 балл
    Используйте механизм уведомлений, которые всплывают внизу, в трее.
  15. 1 балл
    Slym

    Nox: в приложении произошла ошибка

    nox это x86, а надо Arm
  16. 1 балл
    Задался вопросом, нашел ответ, может кому пригодится. 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 Правда у меня только звук "чпок" на всех константах. Но мне он и был нужен )
  17. 1 балл
    Dev

    Анимированная смена форм

    https://www.youtube.com/watch?v=YU7MlY58n9U&t=59s
  18. 1 балл
    Игорь Маринин

    EnCore караоке плеер

    спасибо за совет! нужно набирать команду, что бы хотя бы загрупировать песни по жанрам и добавить иконки исполнителей. пока добавил голосовой ввод для поиска. правда только на русском )) вначале наверное нужно поработать над выводом текста. в настройках сделал плавающий вариант, но на большей половине устройств тупит. нужно переписывать код..
  19. 1 балл
    Оф. справка: Workaround for Android 4.0/Kindle Fire Message: "Application does not support this device"
  20. 1 балл
    Описание: Назначение: Получение подписи клиента в графическом виде. Позволяет получить векторную подпись клиента на устройстве и сохранить ее в файл с любым разрешением Поддерживаемые платформы: Windows, OSX, Android, iOS Демо проект: Samples\SignatureDemo\SignatureDemo.dproj Доступен с версии: R102 Возможности: Экспорт подписи в файл или поток с любым разрешением (TfgSignature.SaveToFile, TfgSignature.SaveToStream). При этом в файле подпись кадрируется, то есть пустые не заполненные области справа, слева, сверху и снизу игнорируются. Доступно изменение точности записи подписи (TfgSignature.TrackingAccurancy). Возможность получить в процентах степень заполнения подписи клиента (TfgSignature.CalculatePercentFilling, TfgSignature.IsValidSignature) Возможность установить цвет (TfgSignature.Stroke) Возможность задать цвет заднего фона (TfgSignature.Brush) Доступно редактирование длительности отображения уведомления (TfgToast.Duration) Возможность менять глобальные параметры отображения всех тостов в рамках приложения (TfgToast.DefaultBackgroundColor, TfgToast.DefaultMessageColor и TfgToast.DefaultPadding) Скриншоты:
  21. 1 балл
    TrueCrypt

    Обработка WM_GETMINMAXINFO

    Благодарю за ответ, пытался исходник поредактировать — винда на права доступа ругалась. Сделал так: unit Forms.Persistent; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, {$IF Defined(WIN32) OR Defined(WIN64)} Winapi.Windows, FMX.Platform.Win, Winapi.Messages, {$ENDIF} FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TfrmPersistent = class(TForm) {$IF Defined(WIN32) OR Defined(WIN64)} private FHwnd: HWND; FOldWndProc: LONG_PTR; protected procedure CreateHandle; override; procedure DestroyHandle; override; {$ENDIF} end; implementation {$R *.fmx} {$IF Defined(WIN32) OR Defined(WIN64)} { TfrmPersistent } procedure TfrmPersistent.CreateHandle; function WindowProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var frm: TCommonCustomForm; begin frm := FindWindow(hwnd); Assert(frm.InheritsFrom(TfrmPersistent)); if Assigned(frm) then begin if uMsg = WM_GETMINMAXINFO then begin with PMinMaxInfo(LParam)^.ptMinTrackSize, frm do begin X := 950 + Width - ClientWidth; Y := 500 + Height - ClientHeight; end; Result := 0; end else Result := CallWindowProc(Ptr(TfrmPersistent(frm).FOldWndProc), hwnd, uMsg, WParam, lParam); end else Result := DefWindowProc(hwnd, uMsg, wParam, lParam); end; begin inherited CreateHandle; FHwnd := WindowHandleToPlatform(Handle).Wnd; FOldWndProc := GetWindowLongPtr(FHwnd, GWL_WNDPROC); SetWindowLongPtr(FHwnd, GWL_WNDPROC, NativeInt(@WindowProc)); end; procedure TfrmPersistent.DestroyHandle; begin Assert(FHwnd <> 0); SetWindowLongPtr(FHwnd, GWL_WNDPROC, FOldWndProc); inherited DestroyHandle; end; {$ENDIF} end. Может кому пригодится.
  22. 1 балл
    Gingercat

    Простая защита программы

    Прошу сильно не пинать, но вдруг понадобится: Вопрос к серверу IdHTTP1->Request->UserAgent= "Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0"; IdHTTP1->Request->Accept= "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; IdHTTP1->Request->AcceptLanguage= "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"; IdHTTP1->Request->Connection= "keep-alive"; IdHTTP1->Request->Host= "store.steampowered.com"; TStrings* ToServer; // чего отправляем TStringStream* Response; // чего получаем ToServer = new TStringList(); Response = new TStringStream(); ToServer->Add("param=" + Edit1->Text); IdHTTP1->HandleRedirects = true; IdHTTP1->Post("http://test.ru/test.php",ToServer, Response); Memo1->Lines->Add(Response->DataString); delete Response; delete ToServer; На сервере лежит обычный PHP скрипт, для теста: <?php $param = $_REQUEST['param']; $fd = fopen("text.txt", "w"); fwrite($fd, $param); fclose($fd); echo $param; ?> Берет ваш "param", записывает в лежащий там-же текстовый файл, и возвращает. Не забыть про разрешения для файла (для PHP не критично, а вот текстовик должен иметь право на чтение и запись, в данном случае). PHP прост, и написать сверку с ключами, лежащими в текстовом файле очень просто. И еще - не до конца понял, как работает, но PHP имеет доступ 0400 - но при этом работает.
  23. 1 балл
    c_breaker

    Проигрывание звуков в формате .mp3 по таймеру

    Может кому поможет - проблема решилась использованием андроидовского SoundPool: создание: FSoundPool := TJSoundPool.JavaClass.init(10, TJAudioManager.JavaClass.STREAM_MUSIC,0); добавление звуков: FSoundPool.load(StringToJString(FileName),1); проигрывание: FSoundPool.play(i,1,1,0,0,1);
  24. 1 балл
    Нужно: Повесить обработчик события на ручную отрисовку ячеек: TGrid.OnDrawColumnCell: В обработчике в зависимости от требуемой строки или данных, нарисовать задний фон ячейки Затем поверх выполнить обычное отображение содержимого ячейки type TOpenColumn = class (TColumn); procedure TForm8.StringGrid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); begin if Row mod 2 = 0 then begin // Выполняем закраску заднего фона Canvas.Fill.Color := TAlphaColorRec.Aliceblue; Canvas.FillRect(Bounds, 0, 0, AllCorners, 1); // Рисуем поверх обычное отображение содержимого ячейки TOpenColumn(Column).DefaultDrawCell(Canvas, Bounds, Row, Value, State); end; end; Для этого примера, у меня получилось так:
  25. 1 балл
    Типы координат В FIreMonkey различают три вида координат: Локальные - это координаты в системе координат контрола. Абсолютные - это координаты в системе координат клиентской части формы. Экранные - это координаты в системе координат экрана. Соответственно, если речь идет о форме, то позиция формы задается в экранных координатах. Если речь идет о контролах, то в локальных координатах своего родительского контрола. Конвертация Локальные -> Абсолютные TControl.LocalToAbsolute(TPointF): TPointF Абсолютные -> Локальные TControl.AbsoluteToLocal(TPointF): TPointF Абсолютные -> Экранные TControl.Scene.LocalToScreen(TPointF): TPointF; Экранные -> Локальные TControl.Scene.ScreenToLocal(TPointF): TPointF;
Эта таблица лидеров рассчитана в Москва/GMT+03:00