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


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

Показан наиболее популярный контент за 15.11.2017 в Сообщения

  1. 11 баллов
    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
  2. 3 балла
    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.
  3. 3 балла
    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
  4. 3 балла
    kami

    Убить поток TThread кроссплатформено

    С каких пор в Delphi перестали существовать TCriticalSection, TMutex, TEvent? Которые, кстати, работают кроссплатформенно, используя штатные средства, предоставляемые ОС.
  5. 3 балла
    krapotkin

    Запуск приложения из текущего

    procedure RunProgram(cmdStr:string; Wait:Boolean; ShowWindow:Word); var si:TStartupInfo; pi:TProcessInformation; s:string; begin FillChar(si, SizeOf(si), 0); si.cb := SizeOf(si); si.dwFlags:=STARTF_USESHOWWINDOW; si.wShowWindow := ShowWindow; s:=cmdStr; UniqueString(s); getlasterror; if not CreateProcess(nil, PChar(S), NIL, NIL, False, 0, NIL, NIL, si, pi) then showMessageFmt('Ошибка %d. %s',[getlasterror,SysErrorMessage(getlasterror)]); if wait then WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); end;
  6. 3 балла
    Fedor K

    IdTCPClient-IdTCPServer управление соединением

    Можете мне сделать тестовый сервер и клиент, чтобы я смог у себя проверить? Тогда мой ответ будет более детальным. А пока: Какой вы объем данных шлете по соединению? Чем вызвана потребность использовать именно сокеты? TimeOut никогда не ставьте большими. Indy работает по принципу блокировки сокета и всего потока в целом. Поэтому большое значение = зависание всего приложения = нежелательные результаты и зависание. Я ставил 100 мс для работы с маленькими пакетами. С такой задержкой доп. поток не обязателен. Если значения более 500 мс - нужно создавать отдельный поток и работать с сокетами в ней + синхронизация при обработке / отправке данных. TIdTCPClient на Andoid любит спать и не проверять входящий буфер. Поэтому вручную нужно вызывать по таймеру проверку типа: procedure T<какое-то имя класа>.Read; var sz : integer; lMsg : string; begin try TMonitor.Enter(Self); try if not Assigned(Client.IOHandler) then Exit; //Client = TIdTCPClient if Client.IOHandler.InputBufferIsEmpty then begin if not Client.IOHandler.CheckForDataOnSource() then exit; end; sz := Client.IOHandler.InputBuffer.Size; if sz <= 0 then exit; lMsg := Client.IOHandler.InputBuffer.ExtractToString(-1, IndyTextEncoding_UTF8); Client.IOHandler.InputBuffer.Clear; <какой-то обработчик входящего сообщения>; except on e : Exception do <какой-то обработчик ошибки>; end; finally TMonitor.Exit(Self); end; end; AntiFreeze - это мягко говоря "костыль" от Indy, использование его плохая практика. На мобильной платформе вряд ли он появится, хотя и реализуется не сложно.
  7. 2 балла
    gonzales

    Пуши в IOS

    Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
  8. 2 балла
    Andrey Efimov

    Два вопроса касательно работы MultiView

    Пользуемся сначала поиском (или заходим в нужный раздел и просматриваем темы)... [TMultiView] Как избежать задержки при первом появлении TMultiView?
  9. 2 балла
    это называется Bounce эффект доступен в TAniCalc, но просто так до него не добраться. Можно использовать ModernListView, там легко это делается. P.S. поиск по форуме ModernLV, ModernListView
  10. 2 балла
    sinuke

    Локализация диалогов

    Локализовать под разные языки не получится. Там эти строки заданы в виде констант. Я лично использую NativeView Равиля - и вид нативный и надписи можно любые вставлять во время выполнения приложения
  11. 2 балла
    krapotkin

    Цикло по unicode строке

    гораздо проще '1234567890'.Contains(ch)
  12. 2 балла
    Если правильно понял, то вам необходимо использовать intent-filter.
  13. 2 балла
    Я пишу на Delphi под iOS без мака. Что понадобится: 1. Процессор Intel, не AMD. Т.к. MacOS работает под Intel. 2. VMware + образ с установленной MAcOS. 3. iPhone 5s или выше. Т.к. начиная с iPhone 5s процессор стал x64. Сейчас публиковать нужно обязательно x64. iPhone 5 версия - x32. Телефон можно купить б\у. Идешь на рутрекер и скачиваешь Vmware образ с уже установленным MacOs Sierra. Также читай инструкции, - нужно пропатчить VMware - т.к. по дефолту возможность работы с OSX там отключена. Дальше присоединяшь телефон к компу, и Vmware определяет этот телефон. Дальше все по инструкции EMBT. Да кстати, желательно не обновлять телефон до версии iOS 11 - к примеру у меня на Berlin были проблемы с этим SDK - поэтому я сейчас компилю проект на 10 SDK (при этом телефон остался на 11). Итого все компилиться, и работает Debug - кстати он гораздо быстрее чем Android отладка. Да не забудьте купить аккаунт разработчика Apple - 100$ в год. Без него будет куча проблем с настройкой. Есть временный бесплатный сертификат на 5 дней (работает в течении 5 дней, затем нужно делать ребилд) - для этого можно запустить Xcode и создать и запустить пустой проект, но лучше сразу купить платный - будет меньше проблем.
  14. 2 балла
    mmover

    TTextSettings неразвёртвовается

    Примерно так: interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics; type TMyLabel = class(TControl) private FFontTextSettingInfo: TTextSettingsInfo; function GetTextSettings: TTextSettings; procedure SetTextSettings(const Value: TTextSettings); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property LabelFont: TTextSettings read GetTextSettings write SetTextSettings; end; implementation type TMyTextSettings = class (TTextSettingsInfo.TCustomTextSettings) public constructor Create(const AOwner: TPersistent); override; published property Font; property FontColor; property HorzAlign; property VertAlign; // можно убрать ненужные свойства // property WordWrap default True; // property Trimming default TTextTrimming.Character; end; constructor TMyTextSettings.Create(const AOwner: TPersistent); begin inherited; WordWrap := False; Trimming := TTextTrimming.Character; end; constructor TMyLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); FFontTextSettingInfo := TTextSettingsInfo.Create(Self,TMyTextSettings); // FFontTextSettingInfo.TextSettings.FontColor := TAlphaColors.Black; // FFontTextSettingInfo.TextSettings.OnChanged := FontChanged; end; destructor TMyLabel.Destroy; begin FFontTextSettingInfo.Free; inherited Destroy; end; function TMyLabel.GetTextSettings: TTextSettings; begin Result := FFontTextSettingInfo.TextSettings; end; procedure TMyLabel.SetTextSettings(const Value: TTextSettings); begin FFontTextSettingInfo.TextSettings.Assign(Value); end; end.
  15. 2 балла
    Чтобы добавить любое изображение в системную галерею изображений Андроида нужно: Получить универсальный URI к вашей картинке GetImageUri. Для этого сохраняем изображение (если изображение находится в памяти устройства, а не в файловой системе) в кэш приложения. Формируем намерение JIntent, что хотим добавить изображение. Задаем URI к картинке и делаем широковещательный запрос на все приложения, которые могут обработать наш запрос. // Сохранение изображения в кэш приложения и извлечение Url к этому файлу function GetImageUri(ABitmap: TBitmap): Jnet_Uri; var ImageFile: JFile; ImageUri: Jnet_Uri; FileNameTemp: JString; FileNameExt: JString; begin FileNameTemp := StringToJString('temp'); FileNameExt := StringToJString('.jpg'); try ImageFile := TJFile.JavaClass.createTempFile(FileNameTemp, FileNameExt); ImageUri := TJnet_Uri.JavaClass.fromFile(ImageFile); ABitmap.SaveToFile(JStringToString(ImageFile.getAbsolutePath)); finally Result := ImageUri; end; end; procedure AddPhotoToGallery(const APhoto: TBitmap); var Intent: JIntent; begin Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_MEDIA_SCANNER_SCAN_FILE); Intent.setData(GetImageUri(APhoto)); SharedActivity.sendBroadcast(Intent); end;
  16. 2 балла
    OnePeople

    Локальная рация, Android, пример

    with Server do begin BufferSize:=buffersize ??? with Server do begin BufferSize:=buffer_size
  17. 2 балла
    enatechno

    Чтение текста

  18. 2 балла
    Fedor K

    IdTCPClient-IdTCPServer управление соединением

    Посмотрел ваш пример, все зависания и вылеты с ошибками связаны с обращением к пустым объектам, попыткой обработать все в одном обработчике. Исправить клиент дело не благодарное, поэтому сделал пример по работе с TCP сокетом с возможностью автоподключения (тык). Проверил на нескольких устройствах, полет нормальный. Основные замечания: Не используйте FormActivate событие, тем более на мобильной платформе. Его обработка замораживает приложение. В примере посмотрите вариант обхода. TIniFile нет смысла использовать каждый раз для считывания настроек. 1 раз считали при старте приложения и больше к файлу не обращаемся. Хранить настройки в компонентах (edSettingHost.Text и т.п.). Создание свойства отнимет максимум минуту, а выгоду даст существенную. TCP сокет соединения следуют принимать как асинхронные, а не как запрос-ответ. Это предусматривает получение команды сервером, какое-то выполнение и лишь потом отправка на клиент. Поэтому попробуйте отказаться от использования GetFromServer. Сервер только запускал для проверки клиента, пару раз ловил outofmemory и access violation, закрыться тоже не захотел по-хорошему. Поэтому желательно его тоже довести до ума.
  19. 1 балл
    krapotkin

    AutoSize работает иначе под Tokyo!

    Ну вообще для меня вот неочевидно, что размер невидимого компонента должен быть определен. если у меня три панели и две из них невидимы, то это сильно влияет на размеры и положение третьей
  20. 1 балл
    Brovin Yaroslav

    Изменение стиля TfgActivityDialog №2

    Судя по официальной доке по кастомизации диалога: https://developer.android.com/guide/topics/ui/dialogs.html?hl=ru#CustomLayout нужно именно создать тему, а не стиль. В приведенной тобой ссылке стиль применяется не к диалогу, а к контенту, что не гибко с точки зрения кастомизации, так как прозрачность диалога задается на уровне кода, а не стиля. Надо посмотреть тут: http://developer.alexanderklimov.ru/android/theme.php про темы в андроиде. И попробовать сделать именно тему со стилем диалога. И потом ее уже применить. Это должно сработать.
  21. 1 балл
    Прочитать всю новость целиком на сайте Embarcadero
  22. 1 балл
    FREEFAR

    Delphi и Android 8

    Да.
  23. 1 балл
    kami

    Непонятки с TWebBrowser

    Попробуйте использовать Navigate (без параметров) вместо Reload. Ну и - делать невидимую работу по правке файла, используя визуальный компонент (Memo) - это, мягко говоря, не комильфо.
  24. 1 балл
    x11

    DevExpress для FMX

    Разработчики DevExpress разрабатывают пробные компоненты для Firemonkey отсюда http://www.sql.ru/forum/1279315-1/na-delphi-dlya-linux-v-etot-raz-s-interfeysom
  25. 1 балл
    krapotkin

    Цвет кнопки

    он и так не во всех темах есть... а стандартный олдскул - 4 цвета в соответствии с состоянием кнопок делать 5 сек
  26. 1 балл
    krapotkin

    Цвет кнопки

    положить в нее ректангл а самый простой - это просто использовать ректангл вместо кнопки
  27. 1 балл
    POV

    [Андроид] TAniIndicator

    А что значит сбросить? Я вместо 0 поставил, например, 200. Компонент стал весь 200х200. Но крутилка в центре не масштабируется. P.S. Сорри, WrapMode = Stretch помогло
  28. 1 балл
    Brovin Yaroslav

    [Андроид] TAniIndicator

    Он использует фиксированный размер. Это зависит от стиля. В данном случае стиль для Андроида и йос именно фиксированного размера. Связано это прежде всего с тем, что эти стили растровые. Если вы хотите снять это ограничение, вы можете отредактировать дефолтный стиль и сбросить значения FixedWidth и FixedHeight.
  29. 1 балл
    Brovin Yaroslav

    [Андроид] TAniIndicator

    Восстановили этй функцию.
  30. 1 балл
    Попробуйте извлечь файл .so из вашего apk и добавить его в папку /system/lib/. Ну и закинуть apk файл в папку /system/priv-app/. А вообще вам не сюда, вам на 4pda или xda-developers (англ.) На этом форуме разработчики софта, а не спецы по модификации прошивок.
  31. 1 балл
    На 10.2 никаких танцев не требуется. Проблемы только начиная с 11 версии, поскольку 11 симуляторы хотят работать только под 64 бита. А делфя пока не умеет мак в 64 бита.
  32. 1 балл
    Brovin Yaroslav

    RAD Android is Our Cool App Winner for October

    I hope everyone had a nice Thanksgiving, and survived the Black Friday/Cyber Monday marketing deluge. I was so busy catching up with family and eating too much that I’m just now announcing Embarcadero’s October Cool App contest winner is RAD Android, an app that makes it easy for people to develop mobile programs. RAD Android, created by talented developer Abdalkader, is a tiny programming language for the Android operating system that allows anyone to write simple programs for Android devices from an Android device. These apps leverage wireless capabilities such as Bluetooth, SMS and Wi-Fi so people can create a wide variety of useful smartphone tools. They can also communicate with the Arduino open source electronics platform to enable makers and tinkerers of all levels to develop an array of imaginative tools and projects such as digital scientific instruments or home tools like an automatic guitar tuner. Using Delphi to create an application development solution, even a tiny one, is a significant undertaking. RAD Android is an amazing example of how native development can unlock the power of the Android platform, given a dedicated and talented developer with the right skills and tools for the job. This video shows RAD Android in action: [YoutubeButton url='https://www.youtube.com/watch?v=9s8L3IMu9pY'] Or visit the Google Play store and install this free app for yourself! Interested in submitting for the Embarcadero’s Cool App contest? It’s open to any business or consumer application built with RAD Studio, Delphi or C++Builder. Embarcadero awards Cool App contest winners a $500 Amazon gift card and winning submissions are also highlighted on the company’s YouTube channel. For more information on the contest and a link to the submission form, click here. Просмотр полной статьи
  33. 1 балл
  34. 1 балл
    Brovin Yaroslav

    Video lesson in English?

    Hello, Thank you for your interest. Yes, video course covers a lot of themes. I tihnk it's a good suggestion to make adopted course with subtitles. I will prepare it. I think it can take a one month for working and localization. Thank you.
  35. 1 балл
    Равиль Зарипов (ZuBy)

    Плавающая кнопка

    вот тут есть
  36. 1 балл
    kami

    Запуск приложения из текущего

    CreateProcess, StartupInfo, ProcessInformation, WaitForSingleObject, CloseHandle объявлены в WinAPI. У других операционных систем методы запуска другие.
  37. 1 балл
    Wovan2

    IdTCPClient-IdTCPServer управление соединением

    To Rusland Тут, видимо, на месте уголков надо явно задать адрес сервера... Я, по крайней мере, так и сделал.
  38. 1 балл
    Перезалил. Итого: 1. Поправил звук, теперь проценты отображаются верно 2. Переместил иконку закрыть, не знаю даст это что то???(wamaco проверь пожалуйста) 3. Звук теперь регулируется вместе со звуком windows И так по мелочи доработал)
  39. 1 балл
    kami

    IdTCPClient, IdTCPSever - снова о кодировке

    Зато его можно указать в конструкторе. Нет. Исходная string в версиях от 2009 и выше - это UnicodeString. В большинстве случаев можно считать как WideString или UCS-2. Кодировка по 2 байта на символ. ANSI - это 1 байт на символ. Действительно, получившийся у Вас код не есть супер-красив. Я продолжаю считать, что всего навсего явное указание Encoding для StringStream снимет эти проблемы. Всякие остальные преобразования, включая явные упоминания конкретных TEncoding и функций перекодировки не нужны.
  40. 1 балл
    Регулировка звука теперь ошибается на 1%, иногда показывает правильное значение. Ещё заметил, что можно в большой минус уйти Если регулировать звук через систему, то значение в приложении не меняется, т.е. в системе выставил 20, а в приложении так и осталось 56.
  41. 1 балл
    У Вас перепутаны строки и столбцы. Нужно или так: for i := 0 to n-1 do for j := 0 to m-1 do Или же так: SG.Cells[i,j]:=inttostr(ImMas[i,j]); TStringGrid: property Cells[const ACol, ARow: Integer] TestSGDraw.zip
  42. 1 балл
    Euvene

    Кнопка с картинкой

  43. 1 балл
    Равиль Зарипов (ZuBy)

    TMapsEngine

    без привязки к платформе, т.к. он работает с апи yandex и google а выводить можно куда захотите, я выводил на TMapView для мобильных, на Windows можно использовать какой-нить другой компонент
  44. 1 балл
    Andrey Efimov

    opendialog для папок

    Так не устраивает? procedure TFormMain.sbSelectFolderClick(Sender: TObject); var PathFolder: string; begin if SelectDirectory('Выбор папки...', '', PathFolder) then ePathFolder.Text := PathFolder; end; SelectDirectory
  45. 1 балл
    Новые вести с поле! Как вы уже знаете, предварительной датой выхода курса было 1 июня. Однако, по ходу записи уроков я обнаружил дополнительные темы, которые считаю необходимым рассмотреть в рамках этого курса подробнее. Это обусловлено моим желанием предоставить вам качественный видео курс, пройдя который, вы cможете быть уверены в полноте полученных знаний. На текущий момент к курсу добавились еще 4 урока о создании стилей для наиболее часто используемых компонентов. Помимо этого много времени ушло на создание отдельной площадки для удобной организации обучения и повышения эффективности этого процесса. К сожалению, я вынужден сдвинуть дату выхода курса еще на один месяц, чтобы полностью завершить работу. Но в конечном итоге вы останетесь довольны.
  46. 1 балл
    Ориентировочная дата выпуска Ориентировочная дата выпуска курса - 31 июня 2016 года. Краткое описание Этот курс посвящен использованию стилей в FireMonkey. Стили являются одной из самых главных особенностей FireMonkey, отличающих FMX фреймворк от других. С одной стороны с их помощью вы можете придать своему приложению индивидуальность и добавить визуальную неповторимость. Однако, с другой стороны использование стилей является очень сложной темой и содержит много нюансов, не зная которые, можно потратить много времени на попытку понять причину неудач использования. Тема является одной из самых популярных, поэтому она будет рассмотрена в первую очередь. Что вы будете уметь после прохождения курса? В результате прохождения курса, вы сможете: Создать свой стиль на основе вашего UI дизайна приложения простейшим путем из возможных Редактировать и дополнять уже существующие стили, идущие в поставке с FireMonkey Создавать и использовать уже существующие стили для использования их в своих компонентах Детально понимать, как работает механизм стилей, Понимать, как создать "эффективный" стиль. Стиль, который не будет сказываться на производительности вашего приложения. Сделать действительно кроссплатформенное приложение с точки зрения стилей. Использование разных стилей для разных платформ (Android, iOS, Windows, OSX) Научитесь анализировать типовые ошибки создания стилей и исправлять их в кратчайшие строки. Будете знать технику создания своего стиля для любого стилевого компонента с нуля. На кого рассчитан курс? Курс рассчитан на: Разработчиков, которые начинают использовать FireMonkey. Разработчиков, планирующие использовать стили в своих приложениях. Разработчиков, которые уже использовали стили, но поняли, что это не так просто, как кажется. Состав курса Пока курс находится в процессе разработке, здесь будут представлены только основные темы и вопросы. По мере готовности курса, будет дано детальное описание всех уроков. Что такое стиль, что он из себя представляет? Архитектура стилей: Основные части стилевого механизма, назначения и их взаимодействия (TStyleBook, TStyledControl, TStyleManager). Как происходит процедура загрузки/выгрузки/смены стиля? Изменение стилей на лету. Замена платформенных стилей. Кеш стилей. Достоинства и потенциальные опасные места при проектировании компонента со стилями. Динамическая подгрузка стиля на мобильных платформах. Уведомления. Способы узнать, когда стиль меняется для компонента или формы. Растровые и векторные стили: Назначения Отличия Достоинства и недостатки? Что выбрать? Манипулирование стилем: Доступ к элементам стиля: StylesData, FindStyleResource. Достоинства и недостатки. Какой способ выбрать? Форсирование загрузки и выгрузки стиля Стилизация рамки окна: Структура стиля рамки окна (Windows only) Какие элементы стиля за что отвечают Платформенные стили: Откуда FireMonkey берёт стиль по умолчанию? Как изменить стиль по умолчанию? Где взять исходники дефолтных стилей. Tint эффект Что такое, зачем нужен и в чем его преимущества? Когда стоит использовать Tint, а когда нет? Принципы работы. Настройки, как использовать? Контролы поддерживающие Tint эффект Дизайнер стилей FMX. Принципы работы Знакомство с интерфейсом, Создание нового стиля, Удаление существующего, Смена порядка стилевых объектов (Z-order), Создание нового стиля Редактирование существующего Дизайнер стилей VCL - как один из способов создания FMX стилей. Описание Основные принципы работы Автоматическое создание FMX стиля без необходимости знания структуры стиля с точки зрения FMX компонентов. Получение стилей по умолчанию. Создание стилей для базовых компонентов (TListBox, TEdit, TMemo, TButton, TTabControl) Как узнать структуру стиля для компонента? Фиксация размера (Фиксация высоты, ширины или ширины и высоты) TListBox: Способы создания своих итемов с любыми элементами TEdit, TMemo: TButton TTabControl Анализ типичных ошибок при создании и редактировании стилей
  47. 1 балл
    Полным ходом идет создание обучающего ресурса с курсами, на котором будет организовано дистанционное обучение. Многое уже сделано, но работа еще продолжается. Стараюсь сделать ресурс простым, не перегруженным и удобным для вашего использования, чтобы вы смогли извлечь максимум полезной информации без затрат на организационные вопросы. А пока вот вам предварительный вид главной страницы сайта
  48. 1 балл
    AlexG

    Как нарисовать круглый TImage

    var BmpNew : TBitmap; begin BmpNew := TBitmap.Create; BmpNew.SetSize({нужный размер}, {нужный размер}); BmpNew.Canvas.BeginScene; try BmpNew.Canvas.Fill.Kind := TBrushKind.Bitmap; BmpNew.Canvas.Fill.Bitmap.WrapMode := TWrapMode.TileStretch; BmpNew.Canvas.Fill.Bitmap.Bitmap := {ваш битмап}; BmpNew.Canvas.Clear(0); BmpNew.Canvas.FillEllipse(RectF(0, 0, {нужный размер}, {нужный размер}), 1); finally BmpNew.Canvas.EndScene; end; TImage{ваш объект}.Bitmap.Assign(BmpNew); end; думаю так
  49. 1 балл
    xenon54

    AdHoc

    Суть в том, что Ad Hoc приложение и не должно заливаться через application loader. Ad hoc служит для распространение программы минуя app store. Вот статья об этом. Если ты делаешь приложение для AppStore и на данном этапе тебе нужно показать приложение заказчику, то можешь скомпилить для AppStore, и залить через application loader. После этого воспользоваться TestFlight для установки на его устройство. При этом приложению не нужно проходить модерацию и публикацию в магазине. Вот еще.
  50. 1 балл
    ruslan

    Универсальный способ хранения настроек

    юзай Rest.Json. пишешь свой класс настроек, например: TSettings = class private fname: string; fpass : string; public property name: string read fname write fname; property pass: string read fass write fpass; end; // вытягиваешь json-строку из файла Settings:= TJson.JsonToObject<TSettings >( 'строка с json, которая из файла' ); // что-то поменял s:= TJson.ObjectToJsonString( Settings ); // сохранил json-строку в файл
Эта таблица лидеров рассчитана в Москва/GMT+03:00