Вячеслав
-
Постов
127 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные Вячеслав
-
-
Добрый день, форумчане! Столкнулся со следующей задачей:
Имеется TListBox с 32 итемами, задаются в DesignTime. В некоторых ситуациях требуется убрать половину, оставить только первые 16 итемов. Я делаю лишние невидимыми, но при этом область прокрутки листбокса остается прежней и излишне большой. В связи с этим вопрос: можно ли как-то ограничить область прокрутки?
XE7, Windows.
-
-
Ну в этом плане конечно это крайне удобный и не трудоемкий вариант.
-
Ну это Вы махнули, никакой уникальности у ID вичестера нет. Меняется этот номер программно на раз, поэтому любому молодому "хакеру" только и нужно будет узнать правильный ID, что тоже очень просто.
-
Я возможно сейчас фигню напишу, палками не бейте. Под андроид не разрабатываю, но вот на винде вопрос общения через порт вставал неоднократно. И там это решалось либо через виртуальный com порт (драйвер от Microsoft), либо напрямую через драйвер производителя USB->UART микросхемы. Второй способ оказался куда приятнее.
К примеру, берём популярную ft232. На их сайте http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples.htm в разделе для Delphi есть удобный Unit-обертка всех библиотечных функций и примеры. Также есть очень толковый мануал. Этот метод даёт куда больше возможностей для разработчика, начиная от большей стабильности работы, заканчивая различными бонусами в виде работы с памятью микросхемы, реализацией I2C, SPI и тд.
К чему это я все? Просто нашёл на их сайте страницу про Андроид: http://www.ftdichip.com/Android.htm
Если FTDI подошли к делу на андройде так же, как и на винде, то это может оказаться полезным.
-
Было:
http://fire-monkey.ru/topic/1560-com-port-firemonkey/
-
Нормального решения пока нет. Либо выносите элементы управления за пределы TMediaPlayerControl, либо создавайте над ним еще одну форму, на которой будут находится другие кликабельные компоненты.
-
Память на утечки проверяете при закрытии программы?
Помните, что в FMX анимации в цикле достаточно сильно нагружают процессор даже в том случае, если форма с анимацией в данный момент не показана (ой сколько я с этим эффектом намучился в свое время).
-
Красота!
-
Все, окончательно осознал механизм работы, теперь все стало на свои места. Все дело в том, что моя камера выдает данные в формате AARRGGBB, только вот значение старших двух бит равно $00, а не $FF. Поэтому картинка и воспринимается прозрачной для TImage. В итоге пробежался в цикле по памяти, поменял нули на $FF и все заработало.
-
Большое спасибо, этот метод работает, многое стало ясно. Правда, для меня это все равно не решение, т.к. в случае создания дополнительного потока только для пересохранения изображения в другом формате я получаю абсолютно такую же реализацию, как и с применением WinAPI и Vcl.Graphics.TBitmap. А это будет влиять на производительность, что в моем случае критично.
Поэтому у меня такой вопрос: нельзя ли заставить TImage сразу воспринимать изображение в формате BMP?
-
А если дополнительную форму над Webbrowser-ом создать, тоже не перекроет? Я просто только под Win пишу, не знаю тонкостей.
-
-
Что-то не то у меня с выводом в Image, возможно какие-то проблемы с PixelFormat. Попытался отвязаться от камеры и заполнить данные изображения каким-либо незамысловатым образом:
function TCamPSEye.GetFMXBitmap: FMX.Graphics.TBitmap; var bitdata: TBitmapData; i, j: Integer; begin Result := FMX.Graphics.TBitmap.Create; Result.SetSize(640, 480); if (Result.Map(TMapAccess.Write, bitdata)) then try for I := 0 to 640 - 1 do for j := 0 to 480 - 1 do begin bitdata.SetPixel(i, j, i * j); end; finally Result.Unmap(bitdata); end; end;
Полученный битмап сохраняю на диск, получаю хорошую красивую картинку:
-
Не помогло. Странно, уже много вариантов перепробовал. В файл картинка сохраняется нормально. Пытаюсь сохранить в поток и загрузить потом из потока - не работает. Такое ощущение, что на этапе сохранения в файл изображение проходит через процедуру дополнительной проверки и каким-то образом преобразуется. Но что именно происходит, отследить не получается даже под дебагом.
-
Почти заработало. Вот код:
function TCamPSEye.GetFMXBitmap: FMX.Graphics.TBitmap; var bitdata: TBitmapData; begin if not CLEyeCameraGetFrame(fInstance, fData, 750) then begin raise Exception.Create('Can not get image data'); Exit; end; Result := FMX.Graphics.TBitmap.Create; Result.SetSize(Resolution.X, Resolution.Y); //Result. if (Result.Map(TMapAccess.Write, bitdata)) then try Move(fData^, bitdata.Data^, Resolution.X * Resolution.Y * 4) finally Result.Unmap(bitdata); end; end;
На выходе получается битмап с данными камеры, который прекрасно сохраняется на диск. А вот в TImage почему-то я его вывести не могу, появляется белая картинка. Вывожу так:
procedure TFormMulticam.Button1Click(Sender: TObject); var bmp: FMX.Graphics.TBitmap; begin bmp := GCameraArray[0].GetFMXBitmap; bmp.SaveToFile('test2FMX.bmp'); Image1.Bitmap.Assign(bmp); bmp.Free; end;
Может, при создании битмапа нужно указывать какие-либо дополнительные атрибуты?
-
Спасибо за ответы! Заглянул в исходники, в assign(bitmapSurface) тоже в конечном итоге все через Map/Unmap, плюс я не понял, как моему экземпляру TBitmapSurface задать значение Bits (свойство только для чтения, поле FBits недоступно, что и понятно). Еще поковыряюсь, чувствую, что уже скоро получу адекватный результат.
-
Нужно именно готовое решение? Я бы не заморачивался и написал под себя нужную реализацию через какой-нибудь TRectangle с анимацией. Работы на пол часа, зато все будет именно так, как вам хочется.
-
Всем добрый день! Написал я тут для своих нужд на Делфи оболочку для работы с SDK для камер PSEye. Примеры были на C++ и С#. Почти все работает, подключает несколько камер, 60fps при VGA-разрешении выдает влёгкую. Но реализацию пришлось делать через VCL.Graphics.TBitmap, а не через фаирманковский. Отчего VCL проект работает шустрее, чем FMX.
Данные с камеры я получаю в виде области памяти, имею указатель на начало и размер области (массив Byte, грубо говоря).
В VCL получение битмапа реализовал через WinAPI функцию GetDIBits, создав предварительно свой заголовок (TBITMAPINFOHEADER).
Хотелось бы узнать, можно ли в FMX как-то напрямую работать с памятью, занимаемой изображением? Где почитать про структуру FMX.Graphics.TBitmap?
-
Поиграйтесь с настройками типа анимации, если не ошибаюсь, In, Out, InOut. Ну и еще крайне важно не слишком сильно забивать приложение всяческими свистоперделками, эффектами, которые нагружают основной поток при отрисовке. Можно также FrameRate изменить, но мне это в свое время не помогло.
А вообще FM, к сожалению, хреново оптимизирована под подобные задачи. Особенно удручает тот факт, что все визуальные компоненты всегда отрисовываются, независимо от того, находятся ли они поверх остальных или перекрыты. Поэтому старайтесь сперва делать в интерфейсе минимум, а потом уже расширяйтесь.
-
Свой код у меня пока нет возможности выложить, попробуйте пока с данной темой ознакомиться:
-
Нет, можно броадкастить своим клиентам, было на форумах. Но ваш вариант тоже вполне работоспособен.
-
Отписался по данной теме на форуме по ESP8266, выложил исходники.
-
Кнопка не растягивается по высоте панели, правильно? А то не очень понятно. Вы бы хоть скриншотик приложили.
Задать область прокрутки TListBox
в Доступ к итемам
Опубликовано
Гениально, спасибо!