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

Вадим Смоленский

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

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

  • Посещение

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

    5

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

  1. Thanks
    Вадим Смоленский отреагировална Tumaso в Не работает свойство ShowHint   
    А ты проверял свойство ParentShowHint?
  2. Thanks
    Вадим Смоленский отреагировална krapotkin в Перенос на другой компьютер   
    https://www.google.com/search?client=opera&q=смонтировать+образ+iso+в+windows+10&sourceid=opera&ie=UTF-8&oe=UTF-8
  3. Thanks
    Вадим Смоленский отреагировална krapotkin в Перенос на другой компьютер   
    поддержу, но в данном случае как раз проблема не в том. лицензия-то есть. и к политике не имеет отношения. она бессрочная.
    а это интернет-инсталлер? может, из ISO-шечки попробовать?
    кроме того сообщение на скрине не говорит, что не установлены платформы, а лишь - нет того, что ожидает установки
    попробуйте чистый проект запустить. Если там появятся нужные платформы, нужно всего лишь поправить руками .dproj
  4. Thanks
    Вадим Смоленский отреагировална krapotkin в Перенос на другой компьютер   
    ну. явно установка не удалась. совсем
    вот ссылки на образ
    ftp://ftpd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2.iso
    http://altd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2.iso
    win 10 позволяет по правой кнопке смонтировать образ как диск. далее все как обычно
    ессн сначала зачистить все что вы написали выше. вроде еще в AppData что-то валяется.
  5. Like
    Вадим Смоленский отреагировална slav_z в Метод Clone   
  6. Thanks
    Вадим Смоленский отреагировална krapotkin в Проигрывание файлов mp4   
    Из бесплатных видимо его. Больше ничего не попадалось очевидного.
    Есть решения типа ffvcl но я не знаю, работают ли они на FMX
    Думаю, не только в делфи нет. Windows в этом плане отстой. Без спецтехники не заведешь. Хуже всего, что нельзя быть ни в чем уверенным. Если в одном месте работает, то в другом не станет.
  7. Like
    Вадим Смоленский получил реакцию от Barbanel в [Windows] Сворачивание приложение   
    Немножко улучшил свой вариант. Теперь вообще как часы всё заработало.
    var TheFormIsMinimized: Boolean = False; TheFormWasMaximized: Boolean = False; function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; begin if (Msg = WM_SHOWWINDOW) and (LParam = SW_PARENTCLOSING) and (not TheFormIsMinimized) then begin TheFormIsMinimized := True; TheFormWasMaximized := (MainForm.WindowState=TWindowState.wsMaximized); SendMessage(FormToHWND(MainForm), WM_SYSCOMMAND, SC_MINIMIZE, 0); MainFormp.WindowState := TWindowState.wsMinimized; end else if (Msg = WM_SHOWWINDOW) and (LParam = SW_PARENTOPENING) and (TheFormIsMinimized) then begin TheFormIsMinimized := False; SendMessage(FormToHWND(MainForm), WM_SYSCOMMAND, SC_RESTORE, 0); if TheFormWasMaximized then MainForm.WindowState := TWindowState.wsMaximized else MainForm.WindowState := TWindowState.wsNormal; end else Result:=CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; Единственный недостаток: при восстановлении из wsMinimized в wsMaximized на долю секунды окно фиксируется как wsNormal. Но это, в общем-то, не страшно.
  8. Like
    Вадим Смоленский отреагировална dnekrasov в Перехват сообщений в Windows   
    Попробуйте ещё так сделать:
    if not FSet and (Msg.WParam = IMN_SETCANDIDATEPOS) then begin FSet := True; Imc:=ImmGetContext(FMXHandleToHWND(Handle)); // ImmGetCandidateWindow(Imc,0,@ImeCandidateFormProperties); ImeCandidateFormProperties.dwIndex:=0; ImeCandidateFormProperties.dwStyle:=CFS_CANDIDATEPOS; ImeCandidateFormProperties.ptCurrentPos.X:=100; ImeCandidateFormProperties.ptCurrentPos.Y:=100; ImeCandidateFormProperties.rcArea:=Rect(0,0,100,100); Msg.Result := LResult(ImmSetCandidateWindow(Imc,@ImeCandidateFormProperties)); ImmReleaseContext(FMXHandleToHWND(Handle),Imc); FSet := False; end; где FSet это глобальное поле типа Boolean. Намного меньше раз заходит в процедуру и более правильно отрабатывает - нет рекурсии вызова.
  9. Like
    Вадим Смоленский отреагировална dnekrasov в Перехват сообщений в Windows   
    Делаем как обычно, если надо переопределить какое-то событие окна
    interface uses {$IFDEF MSWINDOWS} Winapi.Windows, Winapi.Messages, FMX.Platform.Win, {$ENDIF} System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TMainForm = class(TForm) private procedure CreateHandle; override; {$IFDEF MSWINDOWS} procedure WMIMENotify(var Msg: TMessage); message WM_IME_NOTIFY; {$ENDIF} public end; var MainForm: TMainForm; implementation {$R *.fmx} {$IFDEF MSWINDOWS} var OldWndProc: Pointer = nil; function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; var Mess : TMessage; begin case Msg of WM_IME_NOTIFY: begin Mess.Msg := Msg; Mess.WParam := wParam; Mess.lParam := lParam; Mess.Result := 0; MainForm.Dispatch(Mess); Result := Mess.Result; end; else Result := CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; end; {$ENDIF} { TMainForm } procedure TMainForm.CreateHandle; begin inherited CreateHandle; {$IFDEF MSWINDOWS} OldWndProc:= Pointer(SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_WNDPROC, Integer(@NewWndProc))); {$ENDIF} end; {$IFDEF MSWINDOWS} procedure TMainForm.WMIMENotify(var Msg: TMessage); begin {что-то делаем} end; {$ENDIF}  
  10. Like
    Вадим Смоленский отреагировална haword в Windows.Services.Store namespace   
    скорее всего появится в 10.3
    или https://forums.embarcadero.com/thread.jspa?threadID=246134 в самом конце есть ссылки на то как можно попытаться сделать используя библиотеки https://sourceforge.net/projects/dotnetruntimelibraryfordelphi/ 
  11. Like
    Вадим Смоленский получил реакцию от Barbanel в Windows.Services.Store namespace   
    В многомесячной борьбе с Microsoft Store за размещение у них своего Windows-приложения я продвинулся настолько, что вплотную подошел к организации взимания денег с покупателей посредством механизма add-ons (in-app purchases). Но здесь меня ждала очередная засада. Необходимые программные инструменты, главным из которых считается класс StoreContext, лежат в пространстве имен Windows.Services.Store; файлы с такими именами (windows.services.store.h и windows.services.store.idl) в Windows 10 действительно находятся; но в Delphi я не могу найти юнита с чем-то подобным. Хотя на одном форуме видел утверждение годичной давности, что в релизе 10.2 Tokyo это уже есть.
    Не может ли кто-нибудь пролить свет? Не там ищу? Все-таки еще не добавили? Или, может, это появилось лишь в самой последней сборке 10.2.3? У меня стоит 10.2.2.
    Обещание написать подробную статью по итогам моих мытарств остается в силе. На этом пути столько подводных камней и неочевидных ходов, что грех о них не поведать. Но сначала нужно дойти до победного конца.
  12. Like
    Вадим Смоленский получил реакцию от krapotkin в Windows.Services.Store namespace   
    В многомесячной борьбе с Microsoft Store за размещение у них своего Windows-приложения я продвинулся настолько, что вплотную подошел к организации взимания денег с покупателей посредством механизма add-ons (in-app purchases). Но здесь меня ждала очередная засада. Необходимые программные инструменты, главным из которых считается класс StoreContext, лежат в пространстве имен Windows.Services.Store; файлы с такими именами (windows.services.store.h и windows.services.store.idl) в Windows 10 действительно находятся; но в Delphi я не могу найти юнита с чем-то подобным. Хотя на одном форуме видел утверждение годичной давности, что в релизе 10.2 Tokyo это уже есть.
    Не может ли кто-нибудь пролить свет? Не там ищу? Все-таки еще не добавили? Или, может, это появилось лишь в самой последней сборке 10.2.3? У меня стоит 10.2.2.
    Обещание написать подробную статью по итогам моих мытарств остается в силе. На этом пути столько подводных камней и неочевидных ходов, что грех о них не поведать. Но сначала нужно дойти до победного конца.
  13. Like
    Вадим Смоленский получил реакцию от Александр Жевлаков в Папки для пользовательских данных в UWP-приложениях   
    На форуме Эмбаркадеро этот вопрос я задал еще на прошлой неделе - то ли в четверг, то ли в пятницу. Получил сообщение: мол, ваш вопрос будет опубликован после того, как его просмотрит модератор. Сегодня уже среда, а модератор всё спит. Довольно странно функционирует этот форум, я уже не в первый раз замечаю. Существуют ли, интересно, способы как-то на них воздействовать?
    Обращался также к известному дельфийскому эксперту Марко Канту по электронной почте. Он несколько раз ответил - но видно было, что даже он в этих вопросах пока плавает. Теперь вовсе замолчал.
    Если в конце концов разберусь, то статья будет, обещаю. Но буксую уже второй месяц, и уверенности, что разберусь, всё меньше.
  14. Like
    Вадим Смоленский получил реакцию от МихаилЪ чайковЪ в Обработка анимированных GIF по рецепту китайского коллеги   
    Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
    Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
     
  15. Like
    Вадим Смоленский отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги   
    В конце концов получилось исправить.
    Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно.
    Пользуйтесь на здоровье!
    FMX.GifUtils.zip
  16. Like
    Вадим Смоленский отреагировална kami в Хук на клавиатуру   
    Что может быть непонятно во фразе non-zero value из первоисточника? Скорее всего, возвращаемый результат интерпретируется как BOOL. У любого булеан-типа есть два значения: 0 = False, не 0 = True.
    Что там присваивают конкретные компиляторы для значения True - это их проблемы. Сравнение всегда ведется с нулем.
     
    Может да, а может и нет. Откуда вы знаете, какую логику заложили другие разработчики в свои хуки? Это исключительно их дело - считают ли они нужным
     
  17. Like
    Вадим Смоленский отреагировална kami в Хук на клавиатуру   
    https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644984(v=vs.85).aspx
  18. Like
    Вадим Смоленский отреагировална kami в Хук на клавиатуру   
    по тексту этой ошибки гуглится очень многое.
    Основной посыл: для WH_KEYBOARD, если указывать HInstance, то он должен быть инстансом dll. Потому что exe не инжектнется в чужой процесс.
    Можно указать вместо HInstance - 0, а последний параметр выставить в TThread.Current.ThreadID, но (повторюсь) я не уверен, что веббраузер работает только в контексте основного потока приложения.
  19. Like
    Вадим Смоленский отреагировална Barbanel в Хук на клавиатуру   
    Есть старый проект где я реализовал хук на клавиатуру, без использования длл. Проект для дельфи 7, соотв. никакого юникода.
    Подробности сейчас не вспомню, помню лишь что я недели две исследовал как это работает.
    Могу выслать в личку если интересует.
  20. Like
    Вадим Смоленский отреагировална kami в Хук на клавиатуру   
    Да куда угодно. Любой модуль, но скорее всего - модуль той формы, на которой лежит веббраузер (его же нужно "обойти"). Там же (например - в конструкторе / деструкторе формы) - регистрация и удаление хука.
    Ну вот например: https://ru.stackoverflow.com/a/538552/192901  (просмотрел бегло, но криминала нет, по крайней мере - система не помрет, что, кстати, весьма возможно при использовании глобальных хуков).
    вместо SendMessage подставить myForm.OnKeyDown(...);
    возможно - придется несколько поменять внутреннюю логику самого хука. Но основа останется без изменений: внутрь хука получается структура, описывающая "что произошло с клавиатурой". Вы ее обрабатываете, вызываете нужные методы и отдаете управление опять системе.
     
  21. Like
    Вадим Смоленский отреагировална kami в Хук на клавиатуру   
    Было бы неплохо почитать, чем отличается WH_KEYBOARD от WH_KEYBOARD_LL. Принципы действия абсолютно разные.
    Вполне возможно, что окна браузера находятся в другом потоке. Посему для начала экспериментов вам нужен именно WH_KEYBOARD_LL
     
    Ну так нужно же понимать причину - почему он равен нулю. Обращаемся к первоисточнику.
    Смотрите, что вернется и узнавайте причину. Можно так:
    if CurrentHook = 0 then RaiseLastOSError. Нет. Здесь имеется ввиду не разрядность операционной системы, а именно разрядность процессов, запущенных в ней (в 64-битный процесс может быть загружена только 64-битная dll. В 32бита - 32). Кроме того, _LL хуки не зависят от разрядности процесса, поскольку работают в контексте установившего хук потока, им dll не требуется.
  22. Like
    Вадим Смоленский получил реакцию от Rusland в Обработка анимированных GIF по рецепту китайского коллеги   
    Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
    Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
     
  23. Like
    Вадим Смоленский отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги   
    В этом участке кода есть одна маленькая ошибка. Иногда это приводит к тому, что на некоторых кадрах теряется прозрачность.
    Я заменил на вот такое :
    GIF_DISPOSAL_BACKGROUND: begin LFrame.FDisbitmap.Clear(LLocalPalette[LGraphicsCtrlExt.ColorIndex].Color); MergeBitmap(tmp, LFrame.FDisbitmap, Bounds(0, 0, LFrameWidth, LFrameHeight), LFrame.FPos.x, LFrame.FPos.Y); end;  
  24. Like
    Вадим Смоленский получил реакцию от Yarpda в Обработка анимированных GIF по рецепту китайского коллеги   
    Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
    Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
     
  25. Like
    Вадим Смоленский отреагировална GASCHE в Конвертация HString в string   
    Вроде тут System.Win.WinRT.pas есть.
×
×
  • Создать...