ISSprite

DLL ISSprite 0.0.7.48 #32

Нет прав для скачивания

zettend

Старожил
@Shegorat, всё же как по мне, так лучше стоит добавить уже поддержку Fluent Design. Ибо отрисовка спрайтами устарела давно.
 

ffmla

Участник
В свободное время я переписываю ISSprite. Точнее пишу с нуля. Там будет другой движок и немного другая идеология. Постараюсь сохранить совместимость с текущей версией.
Собственно возник вопрос - какие дополнительные функции и возможности вам требуются?
I think you didn't forget my first request Translucent UI.:D
Blur the particular area(Used as background for texts labels).
+
Like as always library size < 50Kb{If Possible}.
 

Shegorat

Lord of Madness
Администратор
@Shegorat, всё же как по мне, так лучше стоит добавить уже поддержку Fluent Design. Ибо отрисовка спрайтами устарела давно.
А что ты подразумеваешь под "добавить поддержку fluent design"?
Это лишь парадигма, которую представили майки, и она не представлена у них из коробки готовыми API функциями. Они точно также реализуются при помощи графической подсистемы GDI, причем те же самые motion реализуются спрайтами, правда создаются они в рантайме, а не представлены готовым изображением. Depth реализуется добавлением оси Z и использовании источников света, используя упрощенный алгоритм трассировки лучей на плоскость.
Я могу добавить инструменты для реализации тех или иных функций, к примеру свет и глубину. Но не готовое решение. . Потому что готовое решение будет однобоким и не будет подходить под все задачи.

I think you didn't forget my first request Translucent UI.:D
Blur the particular area(Used as background for texts labels).
+
Like as always library size < 50Kb{If Possible}.
Yes, i remember your request.

But size of new library will grow up to 150-200Kb
 

Nemko

Дилетант
Модератор
Shegorat, хотелось бы, что бы была "лазейка" для создания своих Control'ов (в botv'e это были панели, которые через CallBack копировали регион с родительского окна, а в ISSprite можно использовать Btn и костылить(как я это делаю) или как в Layered создается новый слой многослойного окна). Хотелось что бы эта возможность сохранилась, это будет заложенным потенциалом. Да и я думал что новая библиотека, станет эксклюзивом для RG Revenants, но раз так то очень круто...

P.S.: Пользуясь случаем, вот Control'ы для ISSprite, готов принимать советы в доработке для оптимизации т.к. мало разбираюсь в сабклассинге ("Восян" короче).
 

Вложения

Последнее редактирование:

Shegorat

Lord of Madness
Администратор
Да и я думал что новая библиотека, станет эксклюзивом для RG Revenants, но раз так то очень круто...
А смысл её скрывать? Так хотя бы будет интерес к ней, и развитие. Иначе проект зависнет, как это было со многими проектами группы
 

mad8834671

Мимокрокодил
В свободное время я переписываю ISSprite. Точнее пишу с нуля. Там будет другой движок и немного другая идеология. Постараюсь сохранить совместимость с текущей версией.
Собственно возник вопрос - какие дополнительные функции и возможности вам требуются?
Я верю, что ты сделаешь лучше, я жду
 

ffmla

Участник

Shegorat

Lord of Madness
Администратор
@ffmla, something like this
Код:
hTask:= spBtnCreateButton(WizardForm.Handle, ExpandConstant('{tmp}\checkbox1.png'), ScaleX(40), ScaleY(245), ScaleX(256), ScaleY(13), BTN_CHECKBOXEX, 0);
spBtnSetText(hTask, CustomMessage('TaskInstallSoft'));
spBtnSetFontColor(hTask, $FFFFFF, clSilver, $9F0B1A, clGray);
spBtnSetEvent(hTask, btnMouseClickEvent, WrapButtonProc(@BtnEvents, 1));
 

ffmla

Участник
^^ Little struggle with checkbox bounds.
Kindly fix the bugged script in the attachment.
is there any general way for checkbox or button texture bound?..

EDIT:
Код:
hTask:= spBtnCreateButton(WizardForm.Handle, 'CheckBox.png', ScaleX(40), ScaleY(245), ScaleX(256), ScaleY(12), BTN_CHECKBOX, 0);
Change the BTN_CHECKBOXEX to BTN_CHECKBOX.
1.BTN_CHECKBOX & BTN_CHECKBOXEX needs 8 & 12 state texture images respectively.
 

Вложения

Последнее редактирование:

Nemko

Дилетант
Модератор
Eng: ffmla, CheckBoxEx has 12 states, not 8. But i don't remember how to get the CheckBox to work correctly. Sorry.
Rus: ffmla, у CheckBoxEx 12 состояний, а не 8. Но я не помню, как заставить CheckBoxEx работать корректно.
 

ffmla

Участник
^^ Oops :scratchhead:.
Sorry @Shegorat @Nemko .iam unaware the states of checkboxes.
I defined 12 state checkbox(checkboxEX) and use the 8 state checkbox.png. That makes the problem.:flagoftruce:
 

ffmla

Участник
Greeting guys,
I try some checklistbox creation with sprite library.But it shows black screen in BG Like



I copy the code from botva2 examples, and replace the corresponding function with sprite's one.(Maybe this is not correct way)

is there any other way to achieve this?.

Thanks in advance.

PS: VirusTotal Result (0/59)
 

Вложения

Nemko

Дилетант
Модератор
Последнее редактирование:

ffmla

Участник
Greetings Guys,
i stucked in button creation in panel using the issprite.

i add simple CusPNL and add a button in example from @Nemko at build27.
It shows the button,but in deinitialization it return Runtime Error.

If creating the backgroung image in panel it works,but if we create the button in the panel it create the Run time error.

How to fix this error? or am i did anything wrong?..
Код:
[Setup]
AppName=MyApp
AppVername=MyApp
CreateAppDir=no

[Modules]
#include "Modules\ISSprite.iss"

[Files]
Source: "Files\*"; Flags: dontcopy;

[Code]
const
  GWL_WNDPROC    =  -4;
  DWL_DLGPROC    =   4;
  GWL_USERDATA   =  -21;
  //
  WM_LBUTTONDOWN =  $201;
  WM_SYSCOMMAND  =  $0112;
  WM_MAGIC_MOVE  =  $F012;
type
  TNewWndProc = function(Handle: HWND; Msg, wParam, lParam: LongInt): LongInt;

function WrapCallBackAddr(callback: TNewWndProc; ParamCount: Integer): LongWord; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function GetWindowLong(hWnd: HWND; nIndex: Integer): LongInt;  external 'GetWindowLongA@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: LongInt; hWnd: HWND; Msg: UINT; wParam: LongInt; lParam: LongInt): LongInt; external 'CallWindowProcA@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: LongInt): LongInt; external 'SetWindowLongA@user32.dll stdcall';
function  ReleaseCapture: LongInt; external 'ReleaseCapture@user32.dll stdcall';

var
  Test: TForm;
  btnTest,btn1: HWND;
  imgTest,img1: LongWord;
  Label1: TLabel;
  CusPNL: TPanel;

procedure btnOnClick(hWnd: HWND);
begin
  Test.Close;
end;

function DragForm(Handle: HWND; Msg, wParam, lParam: LongInt): LongInt;
begin
case Msg of
  WM_LBUTTONDOWN: begin
    Result:=CallWindowProc(GetWindowLong(Handle, GWL_USERDATA), Handle, Msg, wParam, lParam);
    ReleaseCapture; SendMessage(Handle, WM_SYSCOMMAND, WM_MAGIC_MOVE, 0);
  end;
  else Result:=CallWindowProc(GetWindowLong(Handle, GWL_USERDATA), Handle, Msg, wParam, lParam);
 end;
end;

function InitializeSetup: Boolean;
begin
  //
  ExtractTemporaryFile('ISSprite.dll');
  //
  spInitialize(True, True);
  //
  Test:=TForm.Create(nil);
  with Test do begin
    BorderStyle:=bsNone;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(680), ScaleY(360));
    Position:=poScreenCenter;
  SetWindowLong(Handle, GWL_USERDATA, GetWindowLong(Handle, GWL_WNDPROC));
  SetWindowLong(Handle, GWL_WNDPROC, WrapCallBackAddr(@DragForm, DWL_DLGPROC));
  //
  #ifdef IS_ENHANCED
    imgTest:=spImgLoadImageFromBuffer(Handle, 'Fon.png', ScaleX(0), ScaleY(0), ScaleX(680), ScaleY(360), False, True);
  #else
    imgTest:=spImgLoadImage(Handle, 'Fon.png', ScaleX(0), ScaleY(0), ScaleX(680), ScaleY(360), False, True);
  #endif
    //
  #ifdef IS_ENHANCED
    btnTest:=spBtnCreateButtonFromBuffer(Handle, 'Button.png', ScaleX(0){290}, ScaleY(315), ScaleX(65), ScaleY(22), Btn_BUTTON, 0);
  #else
    btnTest:=spBtnCreateButton(Handle, 'Button.png', ScaleX(290), ScaleY(315), ScaleX(65), ScaleY(22), Btn_BUTTON, 0);
  #endif
    spBtnSetEvent(btnTest, BtnMouseClick, @btnOnClick);
    spBtnSetFontColor(btnTest, clBlack, clGreen, clYellow, clBlack);
        spBtnSetText(btnTest, 'Exit');
    //
    spApplyChanges(Handle);
    spImgCreateFormFromImage(Handle, imgTest, True);
    //
    { Label1 }
  Label1 := TLabel.Create(Test);
  with Label1 do
  begin
    Parent := Test;
    Caption := 'Test Label';
    //Color := clFuchsia;
    Font.Color := clred;
    Font.Height := -21;
    Font.Name := 'Tahoma';
    Font.Style := [];
    ParentColor := False;
    ParentFont := False;
    Left := ScaleX(36);
    Top := ScaleY(184);
    Width := ScaleX(95);
    Height := ScaleY(25);
  end;

  CusPNL := TPanel.Create(Test);
  with CusPNL do
  begin
    Parent := Test;
    SetBounds(ScaleX(0), ScaleY(20), Test.Width, Test.Height-ScaleY(100));
    img1:= spImgLoadImage(CusPNL.Handle, 'Fon.png', ScaleX(0), ScaleY(-20), CusPNL.Width+ScaleX(0),CusPNL.Height+ScaleY(0),False,True);
    btn1:= spBtnCreateButton(CusPNL.Handle, 'Button.png',0,0,116,32, $20, 0);
    spApplyChanges(CusPNL.handle);
  end;

  Label1.Show;
    ShowModal;
    spShutdown;
    Free;
  end;
end;
 

Nemko

Дилетант
Модератор
Доброго времени, может кто знает, есть ли возможность задать прозрачность для текста (Shd) созданного через ISSprite посредством WinApi. При создании TABCntroll получается применить прозрачность для Img и контейнера, а для Shd текста нет. Подскажите в какую сторону рыть, вроде текст рисуется через DrawTextA или нет...
01.png
 

Shegorat

Lord of Madness
Администратор
@ffmla, incorrect order of deinitialization actions
Код:
[Setup]
AppName=MyApp
AppVername=MyApp
CreateAppDir=no
OutputDir=.

[Modules]
#include "Modules\ISSprite.iss"

[Files]
Source: "Files\*"; Flags: dontcopy;

[Code]
const
  GWL_WNDPROC    =  -4;
  DWL_DLGPROC    =   4;
  GWL_USERDATA   =  -21;
  //
  WM_LBUTTONDOWN =  $201;
  WM_SYSCOMMAND  =  $0112;
  WM_MAGIC_MOVE  =  $F012;
type
  TNewWndProc = function(Handle: HWND; Msg, wParam, lParam: LongInt): LongInt;

function WrapCallBackAddr(callback: TNewWndProc; ParamCount: Integer): LongWord; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall delayload';
function GetWindowLong(hWnd: HWND; nIndex: Integer): LongInt;  external 'GetWindowLongA@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: LongInt; hWnd: HWND; Msg: UINT; wParam: LongInt; lParam: LongInt): LongInt; external 'CallWindowProcA@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: LongInt): LongInt; external 'SetWindowLongA@user32.dll stdcall';
function  ReleaseCapture: LongInt; external 'ReleaseCapture@user32.dll stdcall';

var
  Test: TForm;
  btnTest,btn1: HWND;
  imgTest,img1: LongWord;
  Label1: TLabel;
  CusPNL: TPanel;

procedure btnOnClick(hWnd: HWND);
begin
  Test.Close;
end;

function DragForm(Handle: HWND; Msg, wParam, lParam: LongInt): LongInt;
begin
case Msg of
  WM_LBUTTONDOWN: begin
    Result:=CallWindowProc(GetWindowLong(Handle, GWL_USERDATA), Handle, Msg, wParam, lParam);
    ReleaseCapture; SendMessage(Handle, WM_SYSCOMMAND, WM_MAGIC_MOVE, 0);
  end;
  else Result:=CallWindowProc(GetWindowLong(Handle, GWL_USERDATA), Handle, Msg, wParam, lParam);
 end;
end;

function InitializeSetup: Boolean;
begin
  //
  ExtractTemporaryFile('ISSprite.dll');
  //
  spInitialize(True, True);
  //
  Test:=TForm.Create(nil);
  with Test do begin
    BorderStyle:=bsNone;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(680), ScaleY(360));
    Position:=poScreenCenter;
    SetWindowLong(Handle, GWL_USERDATA, GetWindowLong(Handle, GWL_WNDPROC));
    SetWindowLong(Handle, GWL_WNDPROC, WrapCallBackAddr(@DragForm, DWL_DLGPROC));
  //
    #ifdef IS_ENHANCED
      imgTest:=spImgLoadImageFromBuffer(Handle, 'Fon.png', ScaleX(0), ScaleY(0), ScaleX(680), ScaleY(360), False, True);
    #else
      imgTest:=spImgLoadImage(Handle, 'Splash.png', ScaleX(0), ScaleY(0), ScaleX(680), ScaleY(360), False, True);
    #endif
    //
    #ifdef IS_ENHANCED
      btnTest:=spBtnCreateButtonFromBuffer(Handle, 'button.png', ScaleX(0){290}, ScaleY(315), ScaleX(65), ScaleY(22), Btn_BUTTON, 0);
    #else
      btnTest:=spBtnCreateButton(Handle, 'button.png', ScaleX(290), ScaleY(315), ScaleX(65), ScaleY(22), Btn_BUTTON, 0);
    #endif
    spBtnSetEvent(btnTest, BtnMouseClick, @btnOnClick);
    spBtnSetFontColor(btnTest, clBlack, clGreen, clYellow, clBlack);
    spBtnSetText(btnTest, 'Exit');
    //
    spApplyChanges(Handle);
    spImgCreateFormFromImage(Handle, imgTest, True);
    //
    { Label1 }
    Label1 := TLabel.Create(Test);
    with Label1 do
    begin
      Parent := Test;
      Caption := 'Test Label';
      //Color := clFuchsia;
      Font.Color := clred;
      Font.Height := -21;
      Font.Name := 'Tahoma';
      Font.Style := [];
      ParentColor := False;
      ParentFont := False;
      Left := ScaleX(36);
      Top := ScaleY(184);
      Width := ScaleX(95);
      Height := ScaleY(25);
    end;

    CusPNL := TPanel.Create(Test);
    with CusPNL do
    begin
      Parent := Test;
      SetBounds(ScaleX(0), ScaleY(20), Test.Width, Test.Height-ScaleY(100));
      img1:= spImgLoadImage(CusPNL.Handle, 'fon.png', ScaleX(0), ScaleY(-20), CusPNL.Width+ScaleX(0),CusPNL.Height+ScaleY(0),False,True);
      btn1:= spBtnCreateButton(CusPNL.Handle, 'Button.png',0,0,116,32, $20, 0);
      spApplyChanges(CusPNL.handle);
    end;

    ShowModal;
    SetWindowLong(Test.Handle, GWL_WNDPROC, GetWindowLong(Test.Handle, GWL_USERDATA));
    Free;
  end;

  spShutdown;
end;
 

Shegorat

Lord of Madness
Администратор
Доброго времени, может кто знает, есть ли возможность задать прозрачность для текста (Shd) созданного через ISSprite посредством WinApi. При создании TABCntroll получается применить прозрачность для Img и контейнера, а для Shd текста нет. Подскажите в какую сторону рыть, вроде текст рисуется через DrawTextA или нет...
Ммм, нет, через WinApi получится поменять прозрачность только для всего контейнера. Текст неоконныё объект, рисуется на канве формы. А функцию для задания альфы я в текущей версии не добавлял.
 

ffmla

Участник
Thanks @Shegorat @Nemko .
Want to know the details of
Код:
procedure spInitialize(nUseLogicPixels: Boolean; nUseSmartPaint: Boolean); external 'spInitialize@{tmp}\ISSprite.dll stdcall delayload';
spInitialize(XX, XX);
Changing the boolean value affect the whole sprite components.
is there any general rule there?

Onemore thing, is ResourceStub.dll really working?.
i found all 3 images inside the dll.
 
Последнее редактирование:

ffmla

Участник
Доброго времени, может кто знает, есть ли возможность задать прозрачность для текста (Shd) созданного через ISSprite посредством WinApi. При создании TABCntroll получается применить прозрачность для Img и контейнера, а для Shd текста нет. Подскажите в какую сторону рыть, вроде текст рисуется через DrawTextA или нет...Посмотреть вложение 5336
use the transparent image as button background,and apply the spBtnSetTransparent function to get transparent label.(cosmetic)
 
Сверху