Перейти к содержанию
Fire Monkey от А до Я

Вячеслав

Пользователи
  • Постов

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

  • Посещение

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

    3

Активность репутации

  1. Like
    Вячеслав отреагировална Andrew в Смещается заголовок формы на Android Intel   
    Нашел и устранил последнюю проблему планшета Lenovo TAB S8-50LC (CPU Intel Atom). Не исключаю, что подобная проблема возникает и на других устройствах.
     
    При изменении ориентации устройства картинка поворачивается моментально. Возможно поэтому в 9 случаях из 10 программа не успевала на это правильно реагировать и форма в портретной ориентации отображалась как альбомная и наоборот. В общем, это выглядело крайне неприятно:
     

     
    Нужно в процедуре "TPlatformAndroid.HandleAndroidCmd(ACmd: Int32);" найти строки:
    ===============
    APP_CMD_CONFIG_CHANGED:
    begin
    FContentRectMightHaveChanged := ContentRectChangeRefreshCount;  // <<---- !!!!
    FOrientationMightHaveChanged := True;
    Include(FAppCmdStates, TAndroidAppCmdState.ConfigChanged);
    end;
    ===============
    и в отмеченной строке умножить ContentRectChangeRefreshCount на 3 или 4: FContentRectMightHaveChanged := ContentRectChangeRefreshCount * 4;
     
    После этой поправки и исправлений от "Magnum Labs" (см. выше) форма отображается правильно, сколько планшет не крути. На скорость работы приложения это никак не отразилось. Проверялось также на нескольких аппаратах Samsung.
     

     
    Если будет интересно, в следующий раз расскажу как устранить проблему ненужного появления NavigationBar если кликнуть по TMediaPlayerControl или TWebBrowser, а также странной анимации появления/скрытия указанных компонент при изменении их свойства Visible. Проблема с NavigationBar касается устройств, у которых имеется SoftKey.
  2. Like
    Вячеслав отреагировална Tera в Семисегментный индикатор   
    Компоненты TSevSeg - семисегментный индикатор и TSeparator - разделитель.
    Переписал компоненты с VCL. Может, кому пригодится. Пример использования:
     

     
    Для разового использования можно просто подключить к проекту как модуль.
     
    SevenSegment.zip
  3. Like
    Вячеслав отреагировална Brovin Yaroslav в Анимированные выводит диаграмму (график)   
    Я бы просто взял бы буфер с двойной шириной. При появлении новой точки просто добавлял ее, а не перерисовывал весь буфер. Затем при выводе просто сдвигал бы битмап. При таком подходе точно будет работать на много быстрее.
  4. Like
    Вячеслав отреагировална FIL в Как вывести (отрисовать) текст по произвольной дуге   
    Набросал пример отрисовки текста по дуге:
    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); const S: String = 'Пример отрисовки текста по заданной траектории (дуга)'; var i: Integer; A, Ao, R, TextLen: Single; Rect: TRectF; M1, M2: TMatrix; // uses System.Math.Vectors begin // if Canvas.BeginScene then begin Randomize; R := 400; Ao := DegToRad(150); // uses System.Math A := (Pi - Ao) / 2; Canvas.Font.Size := 32; Canvas.Stroke.Kind := TBrushKind.Solid; Canvas.StrokeThickness := 3; Canvas.Fill.Color := TAlphaColors.Palegreen xor $80000000; Canvas.FillEllipse(TRectF.Create(0, 0, 2 * R, 2 * R), 1); TextLen := Canvas.TextWidth(S); if TextLen > R * Ao then Caption := 'АХТУНГ!'; // длина текста больше выделенной под него дуги (будет наложение букв) for i := 1 to S.Length do begin Rect.Left := 0; Rect.Top := R; Rect.Width := Canvas.TextWidth(S[i]); Rect.Height := Canvas.TextHeight(S[i]); A := A + Ao / (S.Length - 1); M1 := TMatrix.CreateTranslation(- Rect.CenterPoint.X, - Rect.CenterPoint.Y) * TMatrix.CreateRotation(A - A - Pi / 2) * TMatrix.CreateTranslation(Rect.CenterPoint.X, Rect.CenterPoint.Y); M2 := TMatrix.CreateTranslation(-R, -R) * TMatrix.CreateRotation(A) * TMatrix.CreateTranslation(R, R); Canvas.SetMatrix(M1 * M2); Canvas.Fill.Color := TAlphaColor(Random(MaxInt) or $FF000000); Canvas.FillText(Rect, S[i], False, 1, [{TFillTextFlag.RightToLeft}], TTextAlign.Leading, TTextAlign.Center); end; // Canvas.EndScene; end; end;
  5. Like
    Вячеслав получил реакцию от zairkz в XE8 и Windows 10 Metro UI   
    Это не возможно осознать что вы, тут написали.
  6. Like
    Вячеслав отреагировална Denis Vasilyev в Серия статей, как настроить Android, OS X, iOS Simulator, iOS с RAD Studio (Delphi, C++ Builder)   
    Серия статей с пошаговой инструкцией, как подключить и настроить Android, OS X, iOS Simulator, iOS для работы с RAD Studio.
     
    Как настроить Android и RAD Studio XE7 (Delphi, C++ Builder)
    http://habrahabr.ru/company/delphi/blog/253929/

     
    Как настроить Mac OS X, iOS-симулятор и RAD Studio XE8 (Delphi, C++ Builder)
    http://habrahabr.ru/company/delphi/blog/255721/

     
    Как настроить iOS-устройство и RAD Studio XE8 (Delphi, C++ Builder)
    http://habrahabr.ru/company/delphi/blog/265313/

  7. Like
    Вячеслав отреагировална Равиль Зарипов (ZuBy) в TMapsEngine   
    Компонент TMapsEngine
     
    Возможности
    Нативный LocationSensor [ANDROID] Геокодинг/Реверс геокодинг через Google API, Yandex API, Here Maps API Построение маршрута через Google Distance API Расчет дистанции по прямой Совместим со стандартным компонентом TLocationSensor  
    Видео демонстрация
     
    На видео видно как TMapView косячик с миллионом точек, приложение зависло при отрисовке, но с этим ничего не поделать.
    Без синхронизации не возможно отрисовать все точки
     
    Исходник
    TMapsEngine_source.zip
    TMapsEngine_Seattle_10.zip
     
    Скачать APK  (долго он там не пролежит, а форум не позволяет загрузить zip размером 7,4 мб )
     
  8. Like
    Вячеслав отреагировална Brovin Yaroslav в [TfgRichEdit]- компонент редактирования текста с поддержкой форматирования   
    Работа продолжается.
    Добавлена поддержка расскраски Delphi кода. Создана система, позволяющая самостоятельно обрабатывать блоки документа. Например, чтобы сделать разметку кода. Значительно проработаны отступы для блоков. Добавлены внешние и внутренние отступы.  Исправлены многострочные списки. Теперь если элемент списка занимает больше одной строки, он отображается корректно. Добавлена поддержка закрашивания заднего фона.
    Так же этот компонент уже интегрирован в будущую настольную версию клиента форума.

  9. Like
    Вячеслав получил реакцию от Ingalime в com-порт FireMonkey   
    Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 
    Прощу прощения за то, что выкладываю в неудобной форме, просто из моего проекта сейчас это будет уже достаточно проблематично вытащить.
     
    Код для использования:
    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить. в паблике у формы добавляем объект GPort: TComPort; // ****************************************************************************** // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ // открываем порт procedure TFormChannels.OpenPort(PortNum: Byte); begin GPort := TComPort.Create(PortNum, br9600); GPort.OnRead := FormChannels.OnRead; GFlagOpen := true; FormChannels.ButtonClosePort.Enabled := true; end; // закрываем порт procedure TFormChannels.ClosePort; begin GPort.Free; end; // отправляем в порт данные procedure TFormChannels.WritePort(strWrite: string); var arrBytes: array of Byte; i: Integer; begin if GFlagOpen = False then // проверяем, открыт ли порт OpenPort(strtoint(edtPort.Text)); // если нет, то открываем SetLength(arrBytes, Length(strWrite)); for i := Low(arrBytes) to High(arrBytes) do arrBytes[i] := Ord(strWrite[i + 1]); GPort.Write(arrBytes); arrBytes := nil; end; // читаем данные из порта procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte); var i: Integer; begin memRead1.Lines.BeginUpdate; for i := Low(ReadBytes) to High(ReadBytes) do begin if i > Low(ReadBytes) then memRead1.Text := memRead1.Text; // + '.'; memRead1.Text := memRead1.Text + char(ReadBytes[i]); end; // подчищаем заполняющийся Мемо if memRead1.Lines.Count > 5 then begin // memRead1.Clear; memRead1.Lines.Delete(0); memRead1.Lines.Delete(1); end; memRead1.Lines.EndUpdate; end; procedure TFormChannels.ButtonClosePortClick(Sender: TObject); begin ClosePort; end; // открываем порт кнопкой procedure TFormChannels.ButtonOpenPortClick(Sender: TObject); begin OpenPort(strtoint(edtPort.Text)); end; // отправляем в порт данные кнопкой procedure TFormChannels.btnWriteClick(Sender: TObject); begin WritePort(FormChannels.edtWrite.Text); end; // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ // ****************************************************************************** ComPort.zip
  10. Like
    Вячеслав отреагировална Vitaldj в Нашел реализацию Hint в windows и macOS   
    Коллеги, нашел очень простую и действенную реализацию всплывающей подсказки - hint для windows и macOS. Проверил, работает! Кому надо, забирайте.
    HS_FMXHints.zip
  11. Like
    Вячеслав отреагировална Vladix в Можно ли добавить свой способ переключения в TSwitch?   
    Возникла задача добавить в компонент TSwitch надпись для включенного и выключенного состояния (например ON и OFF).
     
    Изучив компонент в исходниках, обнаружил следующее:
    в создании стиля компонента присутствуют подстили mask, ontext и offtext, видимо, разработчики предусмотрели этот случай. 
     
    В связи с этим вопрос - как минимальными усилиями оживить отображение и стилизацию текста? Если ответ будет с кодом, буду втройне благодарен.
  12. Like
    Вячеслав отреагировална Равиль Зарипов (ZuBy) в Можно ли добавить свой способ переключения в TSwitch?   
    возможно ещё кому и понадобится

    switch.zip
  13. Like
    Вячеслав получил реакцию от Brovin Yaroslav в Tethering Передача звука   
    Не совсем уверен, но попробуйте копнуть в сторону инди-компонентов, использующих протокол UDP. Они могут терять пакеты при плохой связи, но у вас вай фай и проблем быть не должно.
  14. Like
    Вячеслав отреагировална zairkz в Более быстрая альтернатива DrawBitmap   
    Попробуй движок Shadow Engine для Firemonkey, FPS впечатляет.
    https://www.youtube.com/watch?v=w6lGasU61HQ
     
    Gihub: https://github.com/dimsa/ShadowEngine
  15. Like
    Вячеслав отреагировална kami в [TidHTTPServer] Почему при выводе запроса в TMemo из OnCommondGet выдается ошибка AV?   
    Попробовал разобраться, что же происходит во внутренностях idHTTPServer. Ну, что могу сказать - индейцы со времен D2010 далеко продвинулись в плане запутывания кода
    Оберните приведенный код в Synchronize, в качестве первого параметра можно передать nil.
  16. Like
    Вячеслав отреагировална xenon54 в Событие OnMouseUp у TTrackBar   
    Для XE7 можно сделать так: 
    TrackBar1.StylesData['hThumb.OnMouseUp'] := TValue.From<TMouseEvent>(form1.TrackBar1ThumbMouseUp); И не нужно таскать библиотеки с собой.
  17. Like
    Вячеслав отреагировална xenon54 в TServerSocket TClientSocket в FireMonkey   
    Первый пост 2:39 ночи, второй 5:00, третий 6:50, не услышав ответа в такое время на немногочисленном форуме вы сделали вывод что никто не работает с сетью в ФМ, окей 
  18. Like
    Вячеслав отреагировална Brovin Yaroslav в Как Получить текст по TCP (Indy) в нужной кодировке?   
    Добрый день,
     
    Теперь он в качестве параметра принимает объект другого класса, а именно интерфейса IIdTextEncoding, который описывает основные методы по работе с потоком.
     
    Естественно, что этот интерфейс вам не нужно реализовывать, а нужно найти его реализацию для UTF8 кодировки. 
     
    Собственно смотрим в IdGlobal.pas и видим там глобальные процедуры по получению нужных реализаций в требуемых кодировках:
    IdTextEncodingType = (encIndyDefault, encOSDefault, enc8Bit, encASCII, encUTF16BE, encUTF16LE, encUTF7, encUTF8); function IndyTextEncoding(AType: IdTextEncodingType): IIdTextEncoding; overload; function IndyTextEncoding(ACodepage: Word): IIdTextEncoding; overload; function IndyTextEncoding(const ACharSet: String): IIdTextEncoding; overload; {$IFDEF DOTNET} function IndyTextEncoding(AEncoding: System.Text.Encoding): IIdTextEncoding; overload; {$ENDIF} {$IFDEF HAS_TEncoding} function IndyTextEncoding(AEncoding: TEncoding): IIdTextEncoding; overload; {$ENDIF} function IndyTextEncoding_Default: IIdTextEncoding; function IndyTextEncoding_OSDefault: IIdTextEncoding; function IndyTextEncoding_8Bit: IIdTextEncoding; function IndyTextEncoding_ASCII: IIdTextEncoding; function IndyTextEncoding_UTF16BE: IIdTextEncoding; function IndyTextEncoding_UTF16LE: IIdTextEncoding; function IndyTextEncoding_UTF7: IIdTextEncoding; function IndyTextEncoding_UTF8: IIdTextEncoding; Тут либо используем конкретный метод  IndyTextEncoding_UTF8, либо же используем вариант через:
    IndyTextEncoding(IdTextEncodingType.encUTF8)
  19. Like
    Вячеслав получил реакцию от HarrisNuh в Смена родительского компонента для аниматора   
    Всем добрый день. Как правильно переопределить родителя для аниматора и тем самым использовать один аниматор для нескольких объектов?
    Пытаюсь реализовать следующий принцип: на форме несколько прямоугольников и один аниматор. При клике по конкретному прямоугольнику он начинает менять координату. Вот чаcть кода:
    procedure TForm2.MoveRect(Rect: TRectangle); begin //задаем родителя для аниматора Rect.AddObject(AniMoveRect); //Анимируем координату Y прямоугольника AniMoveRect.PropertyName:='Position.Y'; AniMoveRect.Inverse:=False; AniMoveRect.StopValue:=0; AniMoveRect.Start; end; procedure TForm2.RectangleClick(Sender: TObject); begin MoveRect(Sender as TRectangle); end; В итоге анимируется только один прямоугольник - тот, на который кликнули в первый раз. Не могу понять, в чем проблема.
    Данную тему читал, но в ней, насколько я понял, речь идет об одновременном использовании аниматора для двух объектов. 
    AniRects.zip
  20. Like
    Вячеслав отреагировална Brovin Yaroslav в Руководство о пользовательском интерфейсе программы   
    OSX
    Windows 8 и выше
    https://dev.windows.com/en-us/design
  21. Like
  22. Like
    Вячеслав получил реакцию от HarrisNuh в [Windows] Можно ли получить Handle компонента в FMX?   
    Добрый день, друзья! Пытаюсь восстановить старый код, в котором использовался Handle у панели: 
    FVideoWindow.put_Owner(Panel.Handle); Теперь же у панели отсутствует хендл как таковой, и я все никак не разберусь, как этот момент следует обходить. Может, у кого-нибудь есть мысли на этот счет?
  23. Like
    Вячеслав получил реакцию от AngryOwl в Исключение прямоугольной области при выборе случайного значения на двумерной сетке   
    Ну ладно, тогда вот вам кусочный рандом на примере одномерной задачи. 
    Область значений Х состоит из двух областей (I) и (III). При этом Х может принимать значение либо из первой области, либо из второй [строчка (1)]
    Определяем переменную FLAG, которая может быть только или нулем, или единицей [строчка (2)].
    Теперь через нее нетрудно выразить уравнение для Х [строчка (3)]
     
    Сейчас под рукой нет Delphi, поэтому проверить не могу. Но идея, надеюсь, понятна.

  24. Like
    Вячеслав отреагировална Brovin Yaroslav в Исключение прямоугольной области при выборе случайного значения на двумерной сетке   
    Еще есть вариант на одномерном примере. 
     
    Идея ввести параметр, который будет принимать случайное значение от 0 до суммы двух отрезков. Потом проверять, Если параметр попадает в первый отрезок по длине, то добавляем начальную координату отрезка. Если во второй, то добавляем начальную координату второй части. 
     

  25. Like
    Вячеслав получил реакцию от Brovin Yaroslav в Исключение прямоугольной области при выборе случайного значения на двумерной сетке   
    Ну ладно, тогда вот вам кусочный рандом на примере одномерной задачи. 
    Область значений Х состоит из двух областей (I) и (III). При этом Х может принимать значение либо из первой области, либо из второй [строчка (1)]
    Определяем переменную FLAG, которая может быть только или нулем, или единицей [строчка (2)].
    Теперь через нее нетрудно выразить уравнение для Х [строчка (3)]
     
    Сейчас под рукой нет Delphi, поэтому проверить не могу. Но идея, надеюсь, понятна.

×
×
  • Создать...