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

AngryOwl

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

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

  • Посещение

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

    45

Весь контент AngryOwl

  1. Добрый! Есть. Можно использовать сторонние библиотеки и модули, но цена у них приличная, а можно самому сделать. Вот на счет "самому" - будет непросто))) Очень непросто)
  2. Ой, не надо... P.S. Ну а "по факту", где-то что-то было подобное.
  3. Интересно! Т.е., как я понимаю, идея такова - перед тем как начать сравнивать (искать "пустой" битмап), создаем прототип "пустого" битмапа (нужного размера, так как знаем - с чем надо будет сравнивать), а дальше уже каждое изображение сравниваем с данным прототипом? Гуд. Попробую. Спасибо!
  4. Согласен. Я, например, делаю либо свой стиль для нужного компонента, либо делаю копию (например от стиля Android), если хочу чтобы выглядело абсолютно одинаково везде. Можно оставить родной стиль для TPanel, сделав свой стиль, типа panelopacitystyle (и потом задав его вашим панелям, которым требуется именно прозрачность), в котором вы можете изголяться со стилем как вашей душе будет угодно. Заполнять панели чем угодно, хоть картинками... При этом, в чем прелесть, - можно программно менять стиль из приложения при необходимости (например, - реакция на какие-либо события).
  5. Если не ошибаюсь, то у стандартного стиля для Panel - TRectangle - это и есть весь стиль ))) Потому и не может быть Visible=False ) Так уберите у него заливку, сделав ее прозрачной. И все.
  6. 1. Размеры: 320*240, 640*480, 640*360 и др. 2. Заполняет битмапы декодер (в потоках формируется битмап, который копируется, в итоге, в конечный битмап, который и нужно проверить). НЕ заполняться он не может, в нем всегда есть изображение. Другой вопрос, что весь битмап может быть абсолютно "пустым"-черным.
  7. Я об этом думал. Однако, возможно есть другое решение? Более "правильное"... Может можно как-то быстро обработать фрагмент памяти, в котором находится битмап, а не бегать циклом по пикселям, сравнивая цвета. Потому и задал такой вопрос - возможно кто-то знает как это сделать.
  8. Привет, друзья! Подскажите - как, с максимально возможной скоростью, определить отсутствие изображения как такового в TBitmap? Т.е. - есть TBitmap. Он либо заполнен изображением (картинка), либо он - абсолютно черный прямоугольник. Каким способом можно узнать - что в нем именно изображение? Т.е. - НЕ абсолютно черный прямоугольник... И определить это нужно "мгновенно" (условно выражаясь). Заранее всем благодарен за участие! P.S. Варианты типа того что ниже - не предлагать)) Хотелось бы что-то "побыстрее"! Еще раз спасибо! function IsBitmapEmpty(Bmp: TBitmap): Boolean; var X, Y : Integer; BmpData: TBitmapData; yAddr : Integer; AlphaCount : integer; begin Result := False; try AlphaCount := 0; Bmp.Map(TMapAccess.Read, BmpData); for Y := 0 to Bmp.Height div 2 do begin YAddr := Y * Bmp.Height; for X := 0 to Bmp.Width - 1 do if (PAlphaColorArray(BmpData.Data)^[YAddr + X] <> TAlphaColorRec.Null) and (PAlphaColorArray(BmpData.Data)^[YAddr + X] <> TAlphaColorRec.Black) then begin inc(AlphaCount); Break; end; if AlphaCount > 0 then Break; end; finally Bmp.Unmap(BmpData); Result := AlphaCount = 0; end; end;
  9. "Пустая и чистая" форма - вовсе не "пустая". В FMX приложении есть ресурсы. Откройте приложение в редакторе ресурсов (например Restorator 2007 или любой другой) и вы увидите содержимое бинарника. Так-что "пустая/чистая форма" - это в VCL, в FMX иначе.
  10. Какой стиль используется в XE3 и в 6-10 ? Если свой не подгружаете, то, думаю, - по умолчанию. Какой объем бинарника получается при компиляции Release в XE3, и какой в 10? Думаю дело может быть в ресурсах, используемых приложением.
  11. Флуд... Нужно понимать разницу между VCL и FMX. Этого достаточно будет чтобы ответить на Ваш вопрос.
  12. Вас не смущает "размер" вашей "иконки"? Вы в нее решили фотку запилить? Сделайте для теста 32*32
  13. Ну первое что в голову приходит - а какой формат вы грузите? Догадываюсь что "bmp", но я про его формат (бит/цвет, сжатие и т.д.).
  14. Мне это видится примерно так: Отключите автоматическое создание форм. Сначала создайте Splash-форму (эту можно оставить в автомате). Отобразите ее. Создайте вашу "главную" форму. В процедуре OnFormCreate сделайте Preload для стиля (тут на форуме это обсуждалось) - это позволит загрузить стиль, отрисовать все и только затем отобразит вашу форму (по крайней мере - отрисовка произойдет мгновенно, проверено на формах с сотнями компонентов). На OnShow вашей "главной" формы сделайте Application.MainForm := ваша_"главная"_форма и скройте Splash-форму. З.Ы. И, да - лучше оперировать фреймами и создавать их и удалять только тогда, когда они нужны. На скорость это практически не влияет, даже если у вас меню будут фреймами... Это из личного опыта - все достаточно быстро!
  15. Именно так и пойдет! И под виндой и в других платформах ) Во-первых - DoOnCloseInfo лишь вызовет обработчик этого события в главной форме. Разве что - только добавить синхронизацию procedure TframeInfo.DoOnCloseInfo; begin if Assigned(fOnCloseInfo) then TThread.Synchronize(nil, procedure begin fOnCloseInfo(Self); end); end;
  16. у фрейма: private fOnCloseInfo : TNotifyEvent; protected procedure DoOnCloseInfo; dynamic; public { Public declarations } /// <summary> Обработчик события закрытия фрейма </summary> property OnCloseInfo : TNotifyEvent read fOnCloseInfo write fOnCloseInfo; end; procedure TframeInfo.DoOnCloseInfo; begin // Если обработчик назначен, то запускаем его. if Assigned(fOnCloseInfo) then fOnCloseInfo(Self); end; при инициализации фрейма (не важно где и как - когда создается): frameInfo.OnCloseInfo := fmMain.DoOnCloseInfo; при нажатии на кнопку: DoOnCloseInfo; в главной (или любой другой форме, которая будет отрабатывать нажатие кнопки во фрейме): // можно в любой секции, смотря что нам нужно procedure DoOnCloseInfo(Sender: TObject); procedure TfmMain.DoOnCloseInfo(Sender: TObject); begin if Assigned(frameInfo) then FreeAndNil(frameInfo); end; типа так...
  17. При нажатии на кнопку отправить сообщение главной форме, а в обработчике этого сообщения, на который главная форма (условно, можно вообще любую форму) подписана - удалять соответственно этот фрейм.
  18. AngryOwl

    FMX TTaskbar

    Самое простое решение ("на коленке"): uses ... {$IFDEF MSWINDOWS} System.Win.ComObj, Winapi.ShlObj, {$ENDIF} ... //------------------------------------------------- type TTaskBarState = record name : string; value : byte; end; TFMXTaskBar = class(TPersistent) private fTaskBarList : ITaskBarList3; fTaskBarState : integer; fTaskBarProgress : integer; fAlertState : Boolean; procedure setTaskBarState(newState:integer); procedure setTaskBarProgress(newValue : integer); procedure setAlertState(const Value: Boolean); protected public property AlertState: Boolean read fAlertState write setAlertState; property TaskBarState : integer read fTaskBarState write setTaskBarState; property TaskBarProgress : integer read fTaskBarProgress write setTaskBarProgress; constructor Create; destructor Destroy; override; end; //------------------------------------------------- const taskStates : array [0..4] of TTaskBarState = ( (name: 'TBPF_NOPROGRESS'; value: TBPF_NOPROGRESS), (name: 'TBPF_INDETERMINATE'; value: TBPF_INDETERMINATE), (name: 'TBPF_NORMAL'; value: TBPF_NORMAL), (name: 'TBPF_ERROR'; value: TBPF_ERROR), (name: 'TBPF_PAUSED'; value: TBPF_PAUSED)); //------------------------------------------------- var MainTaskBar: TFMXTaskBar; //------------------------------------------------- { TFMXTaskBar } constructor TFMXTaskBar.Create; var tbList : ITaskBarList; hr : HRESULT; begin tbList := CreateComObject(CLSID_TaskBarList) as ITaskBarList; hr := tbList.QueryInterface(IID_ITaskBarList3, fTaskBarList); if hr <> S_OK then begin fTaskBarList := nil; tbList._Release; end; end; destructor TFMXTaskBar.Destroy; begin inherited; end; procedure TFMXTaskBar.setAlertState(const Value: Boolean); begin if assigned(fTaskBarList) then if fAlertState <> Value then begin fAlertState := Value; if Value then begin setTaskBarState(3); // TBPF_ERROR setTaskBarProgress(100); end else begin setTaskBarState(0); setTaskBarProgress(0); end; end; end; procedure TFMXTaskBar.setTaskBarProgress(newValue: integer); begin if assigned(fTaskBarList) then fTaskBarList.SetProgressValue(ApplicationHWND, newValue, 100); end; procedure TFMXTaskBar.setTaskBarState(newState: integer); begin if assigned(fTaskBarList) then fTaskBarList.SetProgressState(ApplicationHWND, taskStates[newState].value); end; //------------------------------------------------- initialization MainTaskBar := TFMXTaskBar.Create; finalization if Assigned(MainTaskBar) then FreeAndNil(MainTaskBar);
  19. AngryOwl

    FMX TTaskbar

    Есть компонент TTaskBar, отвечающий за работу приложения со своим элементом приложения на Панели Задач. Он позволяет отображать "состояние" приложения и т.д. Но вся загвоздка в том, что этот элемент работает только с VCL. Что касается FMX, конкретно под Windows, то таковой реализации нет, и не удается использовать этот компонент "ручками". Короче. Проблема в том, чтобы отображать в "панели задач" состояние FMX приложения. Может кто-то подскажет, в особенности наши уважаемые гуру, - что делать и как быть?
  20. В Designmode разместите кнопки "как видите" их на форме (как они должны быть расположены), а потом левой кнопке поставьте Align = None и Anchors[akLeft,akBottom], а правой Align = None и Anchors[akRight,akBottom]. Думаю, что этого будет достаточно. P.S. Ну и как все будет закончено с их расположением, поставьте им Locked = True (дабы не сместить их ненароком)
  21. Ну вот! Я же говорил как-то - жаль нельзя поставить "Мне нравится" несколько раз! Кто-то тут плачется все время, "вдруг Delphi умрет" ... "Delphi уже мертв" ... "FMX не сегодня завтра умрет" ... Я программирую на Pascal с 91го года. Начинал c Turbo Pascal 5.0. И с тех пор мне пытаются втереть "погромизды" - что Pascal/Delphi давно умер ... Тоже самое касается среды RAD Studio. Так вот благодаря таким людям как Ярослав, Андрей, Равиль и многим многим другим, он не только не умер. Он еще и, в большинстве случаев!, даст форы многим другим языкам и IDE. Так-что еще раз спасибо за решение проблемы! (скажите мне - в каких средах или языках их (проблем) нет! ))))
  22. Работает! А то, что это "костыль" - пофигу! Если бы он был одним единственным... А так - это решение вполне устраивает! Спасибо!
  23. Думаю, что еще и свойство Transparency, при определенных условиях.
  24. Друзья, привет! Вопрос так и остался актуальным. В случае, если свойства формы BorderStyle = None, то Hint'ы не отображаются! Собственно это больше вопрос к нашим гуру. Что делать и как быть?
×
×
  • Создать...