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

Лидеры

  1. Dmitry_4501

    Dmitry_4501

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


    • Баллы

      3

    • Постов

      82


  2. Олег Киреев

    Олег Киреев

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


    • Баллы

      2

    • Постов

      147


  3. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      1

    • Постов

      2 124


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

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

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


    • Баллы

      1

    • Постов

      738


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

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

  1. Спасибо, разобрался по примерам уважаемого сообщества. TCameraComponent не предполагает чего-то кроме устройства по умолчанию (для ноутбука - всегда встроенная камера). Получить изображение с любой из камер позволяет TVideoCaptureDevice получаемый динамически из любого элемента массива TCaptureDeviceManager.Current.Devices[] через методы-обёртки GetDevicesBy... Прикладываю то что получилось для истории video capture.7z
    1 балл
  2. Уважаемый Андрей. Ваше: "маразм крепчает". Совсем не уместен. Прошу Вас в дальнейшем быть сдержанным. С Уважением.
    1 балл
  3. Вопрос решён. Оказывается Access не знает команды SUBSTRING. Oracle знает такую команду, только немного изменённую SUBSTR. Я эту команду заменил на MID. И всё заработало.
    1 балл
  4. По сути, StylesData обращается к полю типа TDictionary<string, TValue>, и позволяет хранить там свои данные. Можно написать что-то вроде // Запись значений TreeViewItem.StylesData['custom.isLocked'] := true; TreeViewItem.StylesData['custom.id'] := 'id'; TreeViewItem.StylesData['custom.groupId'] := 1234; // Получение значений var isLocked: Boolean := TreeViewItem.StylesData['custom.isLocked'].AsBoolean(); var id: string := TreeViewItem.StylesData['custom.id'].AsString(); var groupId: Integer := TreeViewItem.StylesData['custom.groupId'].AsInteger(); И т.д. Разумеется custom не является обязательным, можно использовать любое.
    1 балл
  5. Допустим, на форме есть кнопка со своим стилем, её стиль выглядит допустим так, и надо найти opacityanimation. Искать надо не от sublayout_6, а от самой кнопки, т.е: Если функция находит нужный объект стиля и возвращает true, то тогда можем работать с переменной _opacityAnimation, ведь в неё придет ссылка на объект анимации из стиля. Всё просто. Но кстати, можно работать и другим способом. Если нужно обратиться к одному или нескольким свойствам какого-то объекта внутри стиля то можно использовать первый способ (желтый) А если нужно получить объект, то есть второй способ (зеленый). В принципе логика можно сказать такая же что и в самом первом способе через FindStyleResource Полезная особенность StylesData. Его можно использовать для хранения любых пользовательских данных.
    1 балл
  6. Я такое поведение реализовал с одними лишь стилями, код вообще не писал. А вот при помощи кода решил другой ваш вопрос (про AlternatingRowBackground) FMXProject.zip
    1 балл
  7. Хендлер делается несложно, создаешь его и вешаешь свой обработчик сообщений type TMyForm = class(TForm) private {$IFDEF MSWINDOWS} // Сохраненный обработчик сообщений окна FPrevWndProc: TFNWndProc; // Установленный обработчик сообщений окна FWndProc: Pointer; // Обработчик сообщений окна procedure FormWndProc(var AMsg: Winapi.Messages.TMessage); {$ENDIF} protected {$IFDEF MSWINDOWS} procedure CreateHandle; override; {$ENDIF} end; {$IFDEF MSWINDOWS} procedure TMyForm.FormWndProc(var AMsg: Winapi.Messages.TMessage); begin case AMsg.Msg of WM_SETTINGCHANGE: begin // смотрим наличие ImmersiveColorSet в сообщении и включаем нужную тему из нужного StyleBook на форме end; end; AMsg.Result := CallWindowProc(FPrevWndProc, FormToHWND(Self), AMsg.Msg, AMsg.WParam, AMsg.LParam); end; procedure TMyForm.CreateHandle; begin inherited; var LHandle: HWND := FormToHWND(Self); FPrevWndProc := TFNWndProc(GetWindowLong(LHandle, GWL_WNDPROC)); FWndProc := MakeObjectInstance(FormWndProc); SetWindowLong(LHandle, GWL_WNDPROC, NativeInt(FWndProc)); end; {$ENDIF}
    1 балл
  8. Тут в процессе работы над одним проектом понадобилось узнать IP адрес устройства. Очень не хотелось включать дополнительные разрешения приложению. Думал ограничится одним "Доступ в Интернет". Вот как это можно сделать: С помощью TIdUDPServer посылаем широковещательное сообщение, с помощью того же TIdUDPServer сами получаем его и в ABinding узнаем с какого IP оно пришло. Таким образом мы узнаем IP адрес интерфейса с маршрутом по умолчанию. Вот код, все просто: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, IdGlobal, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer; const ConstUDPSendString = 'dfgb2hd3f6gbf'; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } FUDPServer : TIdUDPServer; FMyIP : String; procedure OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure GetMyIP; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin GetMyIP; end; procedure TForm1.GetMyIP; begin FMyIP:=''; FUDPServer:=TIdUDPServer.Create; FUDPServer.DefaultPort:=46734; FUDPServer.BroadcastEnabled:=True; FUDPServer.OnUDPRead:=OnUDPServerUDPRead; FUDPServer.Active:=True; FUDPServer.Broadcast(ConstUDPSendString, FUDPServer.DefaultPort); end; procedure TForm1.OnUDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin AThread.Synchronize(AThread, procedure begin if BytesToString(AData).Equals(ConstUDPSendString) and FMyIP.IsEmpty then FMyIP:=ABinding.PeerIP; end ); end; end.
    1 балл
  9. Часть исходного TBitmap вырезается при помощи отрисовки этой части в другой TBitmap. Допустим есть такой проект: Тогда алгоритм по вырезанию будет следующий: Определяем регион вырезаемой области: var BitmapSource: TBitmap; BitmapDest: TBitmap; DestWidth: Integer; DestHeight: Integer; BitmapSourceRect: TRectF; BitmapDestRect: TRectF; begin BitmapSource := ImageSrc.Bitmap; BitmapSourceRect := TRectF.Create(TPointF.Create(nbX.Value, nbY.Value), nbWidth.Value, nbHeight.Value); Создаем TBitmap для вырезанной части: DestWidth := Max(0, Round(nbWidth.Value)); DestHeight := Max(0, Round(nbHeight.Value)); BitmapDest := TBitmap.Create(DestWidth, DestHeight); BitmapDestRect := TRectF.Create(0, 0, BitmapDest.Width, BitmapDest.Height); Выполняем отрисовку области исходного битмапа в конечный: if BitmapDest.Canvas.BeginScene then try BitmapDest.Canvas.DrawBitmap(BitmapSource, BitmapSourceRect, BitmapDestRect, 1); finally BitmapDest.Canvas.EndScene; end; Выводим полученное изображение на форму: ImageDest.Bitmap.Assign(BitmapDest); Результат:
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...