FMXBridge.dll для Inno Setup

DLL FMXBridge.dll для Inno Setup 28.06

Нет прав для скачивания
было бы круто если бы поддерживало и нормально обрабатывало SVG изображение
Это мне кажется по большей части вопросы к создателям FireMonkey. Там тоже нет нативной нормальной графики с SVG. Много кто использует сторонние решения, либо же на прямую SKIA, что здесь кратно увеличит вес инсталлятора и создаст проблемы
 
Это мне кажется по большей части вопросы к создателям FireMonkey. Там тоже нет нативной нормальной графики с SVG. Много кто использует сторонние решения, либо же на прямую SKIA, что здесь кратно увеличит вес инсталлятора и создаст проблемы
Понял. Про это я как раз и имел ввиду о чем вы тут только что сказали. А какие сторонние решения я читал про некоторые. Но пока подобные процессы происходят мне кажется что проще тогда через атлас делать что бы отзывчивость не терять и быстродействие. просто у SVG маштабирование хорошее
 
Простой пример FImageButton, FImageCheckbox
"Живой" пример
Посмотреть вложение 10342
Идею с FImageButton пока в отстойник (в задумке и ProgressBar и RadioButton). Может соберу баги и так далее (хотя вряд ли). По факту проект FMXBridge постепенно выходит за рамки простого моста и превращается в слой собственных UI-компонентов. Это первый опыт что то делать напрямую на базе TControl с отрисовкой через Canvas, без опоры на FMX style-систему.
 
было бы круто если бы поддерживало и нормально обрабатывало SVG изображение
Поддержка SVG в проекте есть.
1. FPath умеет только линии одного цвета (Fill/Stroke), плюс градиенты. Значки для кнопок и так далее.
2. https://github.com/EtheaDev/SVGIconImageList он то же есть в проекте - FSVGImage.
там уже полноценное SVG-изображение.
SVG-анимации или чего то подобного в FMX или Skia+FMX нет вообще. Тут ничем не помогу.
Примеры в архиве Example_Path.iss и Example_SVGImage.iss

56.png

4.png
 
Последнее редактирование:
Поддержка SVG в проекте есть.
1. FPath умеет только линии одного цвета (Fill/Stroke), плюс градиенты. Значки для кнопок и так далее.
2. https://github.com/EtheaDev/SVGIconImageList он то же есть в проекте - FSVGImage.
там уже полноценное SVG-изображение.
SVG-анимации или чего то подобного в FMX или Skia+FMX нет вообще. Тут ничем не помогу.
Примеры в архиве Example_Path.iss и Example_SVGImage.iss


да мне главное иконки SVG что бы хорошо работали ну и анимация например масштабирования при наведении.
 
да мне главное иконки SVG что бы хорошо работали ну и анимация например масштабирования при наведении.
Иконки как выше сказали уже можно загрузить через FSVGImage. ну а анимацию скейла легко сделать, скорее как у базовых элементво либы. Если конечно тов. audiofeel сделал такую возможность.
 
Если конечно тов. audiofeel сделал такую возможность.
code_language.pascal:
type
  FSVGImage = interface(IUnknown)
    '{C37B911B-5F71-48CC-BC3C-28DBD9318C1F}'
    function FCreate(FParent: NativeInt): NativeInt;
    procedure Cursor(FCursor: TCursor);
    procedure Left(FLeft: Single);
    procedure Top(FTop: Single);
    procedure Height(FHeight: Single);
    procedure Width(FWidth: Single);
    procedure SetBounds(FLeft, FTop, FWidth, FHeight: Single);
    procedure Position(X, Y: Single);
    procedure Align(Al: TAlignLayout);
    procedure Margins(FLeft, FTop, FRight, FBottom: Single);
    procedure Padding(FLeft, FTop, FRight, FBottom: Single);
    procedure SetHint(const FText: WideString);
    procedure SetClipParent(FValue: Boolean);
    procedure SetClipChildren(FValue: Boolean);
    procedure BringToFront;
    procedure SendToBack;
    procedure SetTag(FTag: Integer);
    procedure LoadFromFile(const FSVGImage: WideString);
    procedure MarginWrapMode(FWrapMode: TImageWrapMode);
    procedure WrapMode(FWrapMode: TImageWrapMode);
    procedure FixedColor(FColor: TAlphaColor);
    procedure SVGText(FText: WideString);
    procedure SaveToFile(FFile: WideString);
    procedure BitmapZoom(FValue: Integer);
    procedure GrayScale(FValue: Boolean);
    procedure DisableInterpolation(FValue: Boolean);
    procedure Opacity(FOpacity: Single);
    procedure RotationAngle(FValue: Single);
    procedure RotationCenter(X, Y: Single);
    procedure Enabled(FEnabled: Boolean);
    procedure Visible(FVisible: Boolean);
    procedure HitTest(FEnabled: Boolean);
    function GetSVGText: WideString;
    function GetTag: Integer;
    function GetLeft: Single;
    function GetTop: Single;
    function GetHeight: Single;
    function GetWidth: Single;
    function GetObject: NativeInt;
    procedure OnClick(Event: TNotifyEvent);
    procedure OnMouseDown(Event: TMouseEventF);
    procedure OnMouseEnter(Event: TNotifyEvent);
    procedure OnMouseLeave(Event: TNotifyEvent);
    procedure OnMouseUp(Event: TMouseEventF);
    function Handle: NativeInt;
  end;
 
audiofeel обновил(а) ресурс FMXBridge.dll для Inno Setup новой записью:

Небольшое обновление

Добавлены новые интерфейсы:

FShapeArc - круговой прогресс-бар с поддержкой stroke, font, value, opacity, rotation, events и базовых layout-параметров.
FShapeSwitch - переключатель (on/off) с настройкой цветов, толщины, слайдера, состояния и событий OnChange.
FShapeButton - кнопка с текстом, стилем, скруглением, цветами, шрифтом и...

Узнать больше об этом обновлении...
 
Кто знает способ получить физический объём VRAM видеокарты (как? не принципиально)
Интересует именно аппаратный объём памяти, а не:
DXGI_ADAPTER_DESC.DedicatedVideoMemory
shared/system memory,
allocated/available memory,

Нужно именно реальное значение.
 
I think DXGI/EnumDisplayDevices (DedicatedVideoMemory/HardwareInformation.qwMemorySize) with help of the registry is still the best way of retrieving this value even if it is incorrect simply because I don't think the real value can be obtained at least from user mode from what I know. You need kernel level access to get the correct value or another program that has kernel access and has stored this information elsewhere. I say this because DirectX, OpenCL, OpenGL and Vulkan all return the same incorrect value and all of them operate at user mode.

An example of this is with system memory (RAM), if you use GlobalMemoryStatusEx (_MEMORYSTATUSEX.ullTotalPhys), you get less memory than the actual value however, there's another function GetPhysicallyInstalledSystemMemory, this one gives you the correct value at user mode, however this function uses SMBIOS to get this value, and SMBIOS itself retrieves information at kernel level on system startup.

This is why when you use GetPhysicallyInstalledSystemMemory under virtual machine, you get an error because some virtual machines do not generate SMBIOS properly.

Three solutions:

1. First solution is to roundup.
function Align(Value, Size: Int64): Int64;
begin
if Value mod Size <> 0 then
Result := Succ(Max(0, Value div Size)) * Size
else
Result := Value;
end;

function CorrectMemory(Value: Int64): Int64;
begin
if Value <= 512 shl 20 then
Result := Align(Value, 32 shl 20)
else if Value <= 2048 shl 20 then
Result := Align(Value, 128 shl 20)
else
Result := Align(Value, 1024 shl 20);
end;
Use this roundup function to convert values that are close to the actual value.

GPU VRAM detected as 8046 MB gets converted to 8192 MB.

Rounding up works because VRAM hardware reservations are only a few MBs, this would not work for system memory because of iGPU memory allocation in the bios which would eat several GBs etc...

2. The second solution is to reverse engineer task manager or find out where task manager retrieves this value from
1782854958023.png

Because if you add the value you find from DXGI DedicatedVideoMemory with this one, you get the real/correct value.

3. Build a driver that can access this information or use another program/library that can dump the information1782855234446.png
 
Назад
Сверху