-
Постов
222 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Активность репутации
-
Вадим Смоленский отреагировална Tumaso в Не работает свойство ShowHint
А ты проверял свойство ParentShowHint?
-
Вадим Смоленский отреагировална krapotkin в Перенос на другой компьютер
https://www.google.com/search?client=opera&q=смонтировать+образ+iso+в+windows+10&sourceid=opera&ie=UTF-8&oe=UTF-8
-
Вадим Смоленский отреагировална krapotkin в Перенос на другой компьютер
поддержу, но в данном случае как раз проблема не в том. лицензия-то есть. и к политике не имеет отношения. она бессрочная.
а это интернет-инсталлер? может, из ISO-шечки попробовать?
кроме того сообщение на скрине не говорит, что не установлены платформы, а лишь - нет того, что ожидает установки
попробуйте чистый проект запустить. Если там появятся нужные платформы, нужно всего лишь поправить руками .dproj
-
Вадим Смоленский отреагировална 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 что-то валяется.
-
-
Вадим Смоленский отреагировална krapotkin в Проигрывание файлов mp4
Из бесплатных видимо его. Больше ничего не попадалось очевидного.
Есть решения типа ffvcl но я не знаю, работают ли они на FMX
Думаю, не только в делфи нет. Windows в этом плане отстой. Без спецтехники не заведешь. Хуже всего, что нельзя быть ни в чем уверенным. Если в одном месте работает, то в другом не станет.
-
Вадим Смоленский получил реакцию от 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. Но это, в общем-то, не страшно.
-
Вадим Смоленский отреагировална 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. Намного меньше раз заходит в процедуру и более правильно отрабатывает - нет рекурсии вызова.
-
Вадим Смоленский отреагировална 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}
-
Вадим Смоленский отреагировална haword в Windows.Services.Store namespace
скорее всего появится в 10.3
или https://forums.embarcadero.com/thread.jspa?threadID=246134 в самом конце есть ссылки на то как можно попытаться сделать используя библиотеки https://sourceforge.net/projects/dotnetruntimelibraryfordelphi/
-
Вадим Смоленский получил реакцию от 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.
Обещание написать подробную статью по итогам моих мытарств остается в силе. На этом пути столько подводных камней и неочевидных ходов, что грех о них не поведать. Но сначала нужно дойти до победного конца.
-
Вадим Смоленский получил реакцию от 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.
Обещание написать подробную статью по итогам моих мытарств остается в силе. На этом пути столько подводных камней и неочевидных ходов, что грех о них не поведать. Но сначала нужно дойти до победного конца.
-
Вадим Смоленский получил реакцию от Александр Жевлаков в Папки для пользовательских данных в UWP-приложениях
На форуме Эмбаркадеро этот вопрос я задал еще на прошлой неделе - то ли в четверг, то ли в пятницу. Получил сообщение: мол, ваш вопрос будет опубликован после того, как его просмотрит модератор. Сегодня уже среда, а модератор всё спит. Довольно странно функционирует этот форум, я уже не в первый раз замечаю. Существуют ли, интересно, способы как-то на них воздействовать?
Обращался также к известному дельфийскому эксперту Марко Канту по электронной почте. Он несколько раз ответил - но видно было, что даже он в этих вопросах пока плавает. Теперь вовсе замолчал.
Если в конце концов разберусь, то статья будет, обещаю. Но буксую уже второй месяц, и уверенности, что разберусь, всё меньше.
-
Вадим Смоленский получил реакцию от МихаилЪ чайковЪ в Обработка анимированных GIF по рецепту китайского коллеги
Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
-
Вадим Смоленский отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги
В конце концов получилось исправить.
Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно.
Пользуйтесь на здоровье!
FMX.GifUtils.zip
-
Вадим Смоленский отреагировална kami в Хук на клавиатуру
Что может быть непонятно во фразе non-zero value из первоисточника? Скорее всего, возвращаемый результат интерпретируется как BOOL. У любого булеан-типа есть два значения: 0 = False, не 0 = True.
Что там присваивают конкретные компиляторы для значения True - это их проблемы. Сравнение всегда ведется с нулем.
Может да, а может и нет. Откуда вы знаете, какую логику заложили другие разработчики в свои хуки? Это исключительно их дело - считают ли они нужным
-
Вадим Смоленский отреагировална kami в Хук на клавиатуру
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644984(v=vs.85).aspx
-
Вадим Смоленский отреагировална kami в Хук на клавиатуру
по тексту этой ошибки гуглится очень многое.
Основной посыл: для WH_KEYBOARD, если указывать HInstance, то он должен быть инстансом dll. Потому что exe не инжектнется в чужой процесс.
Можно указать вместо HInstance - 0, а последний параметр выставить в TThread.Current.ThreadID, но (повторюсь) я не уверен, что веббраузер работает только в контексте основного потока приложения.
-
Вадим Смоленский отреагировална Barbanel в Хук на клавиатуру
Есть старый проект где я реализовал хук на клавиатуру, без использования длл. Проект для дельфи 7, соотв. никакого юникода.
Подробности сейчас не вспомню, помню лишь что я недели две исследовал как это работает.
Могу выслать в личку если интересует.
-
Вадим Смоленский отреагировална kami в Хук на клавиатуру
Да куда угодно. Любой модуль, но скорее всего - модуль той формы, на которой лежит веббраузер (его же нужно "обойти"). Там же (например - в конструкторе / деструкторе формы) - регистрация и удаление хука.
Ну вот например: https://ru.stackoverflow.com/a/538552/192901 (просмотрел бегло, но криминала нет, по крайней мере - система не помрет, что, кстати, весьма возможно при использовании глобальных хуков).
вместо SendMessage подставить myForm.OnKeyDown(...);
возможно - придется несколько поменять внутреннюю логику самого хука. Но основа останется без изменений: внутрь хука получается структура, описывающая "что произошло с клавиатурой". Вы ее обрабатываете, вызываете нужные методы и отдаете управление опять системе.
-
Вадим Смоленский отреагировална kami в Хук на клавиатуру
Было бы неплохо почитать, чем отличается WH_KEYBOARD от WH_KEYBOARD_LL. Принципы действия абсолютно разные.
Вполне возможно, что окна браузера находятся в другом потоке. Посему для начала экспериментов вам нужен именно WH_KEYBOARD_LL
Ну так нужно же понимать причину - почему он равен нулю. Обращаемся к первоисточнику.
Смотрите, что вернется и узнавайте причину. Можно так:
if CurrentHook = 0 then RaiseLastOSError. Нет. Здесь имеется ввиду не разрядность операционной системы, а именно разрядность процессов, запущенных в ней (в 64-битный процесс может быть загружена только 64-битная dll. В 32бита - 32). Кроме того, _LL хуки не зависят от разрядности процесса, поскольку работают в контексте установившего хук потока, им dll не требуется.
-
Вадим Смоленский получил реакцию от Rusland в Обработка анимированных GIF по рецепту китайского коллеги
Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
-
Вадим Смоленский отреагировална 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;
-
Вадим Смоленский получил реакцию от Yarpda в Обработка анимированных GIF по рецепту китайского коллеги
Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
-
Вадим Смоленский отреагировална GASCHE в Конвертация HString в string
Вроде тут System.Win.WinRT.pas есть.