joparoobit Цитата: Проблема в том, что если окно не модальное, то возможно активировать то окно что под ним, а это в свою очередь означает перерисовки(мерцание), возможность свернуть и пр.
вот после этого
Цитата: а по интересующему тебя вопросу рекомендую скачать Коллекция скриптов, и найти там Gradient_final.iss
на детский сад похоже
этот скрипт при знании delphi переписать 10 мин.
[more][Setup]
AppName=Gradient
AppVerName=Gradient
CreateAppDir=false
OutputDir=.
[Code]
type
hDC=Longint;
TSize=record
cx:UINT;
cy:UINT;
end;
const
BeginColor=$0000FF;
FinishColor=$FF0000;
function MulDiv(Number,Numerator,Denominator:integer):integer;external 'MulDiv@kernel32.dll stdcall';
function SetBkMode(DC:hDC;BkMode:integer):integer;external 'SetBkMode@gdi32.dll stdcall';
function GetSystemMetrics(nIndex:integer):integer;external 'GetSystemMetrics@user32.dll stdcall';
function RGB(r,g,b:Longint):Longint;
begin
Result:=(r or (g shl 8) or (b shl 16))
end;
function GetBValue(rgb:DWORD):Byte;
begin
Result:=Byte(rgb shr 16)
end;
function GetGValue(rgb:DWORD):Byte;
begin
Result:=Byte(rgb shr 8)
end;
function GetRValue(rgb:DWORD):Byte;
begin
Result:=Byte(rgb)
end;
procedure GradientFill(WorkBmp:TBitmapImage;BeginColor,FinishColor:TColor);
var
ColorBand:TRect;
i,n:integer;
begin
WorkBmp.Bitmap.Width:=WorkBmp.Width;
WorkBmp.Bitmap.Height:=WorkBmp.Height;
n:=255;
for i:=0 to n do begin
ColorBand.Right:=WorkBmp.Width;
ColorBand.Top:=MulDiv(i,WorkBmp.Height,n);
ColorBand.Bottom:=MulDiv(i+1,WorkBmp.Height,n);
WorkBmp.Bitmap.Canvas.Brush.Color:=RGB(GetRValue(BeginColor)+MulDiv(i,GetRValue(FinishColor)-GetRValue(BeginColor),n-1),
GetGValue(BeginColor)+MulDiv(i,GetGValue(FinishColor)-GetGValue(BeginColor),n-1),
GetBValue(BeginColor)+MulDiv(i,GetBValue(FinishColor)-GetBValue(BeginColor),n-1));
WorkBmp.Bitmap.Canvas.FillRect(ColorBand);
end;
end;
procedure BitmapTextOut(Bmp:TBitmapImage;Text,FontName:string;Style,Left,Top,Size:Byte;Color:TColor);
// позицию текста указывать в процентах
begin
with Bmp.Bitmap.Canvas do begin
case Style of
1: Font.Style:=[fsBold];
2: Font.Style:=[fsItalic];
3: Font.Style:=[fsBold, fsItalic];
end;
Font.Height:=(Bmp.Width+Bmp.Height)/200*Size // попытка подстроить шрифт под размер окна
SetBkMode(Handle,1);
Font.Name:=FontName;
Font.Color:=clBlack;
TextOut(Bmp.Width/100*Left,Bmp.Height/100*Top,Text);
Font.Color:=Color;
TextOut(Bmp.Width/100*Left-2,Bmp.Height/100*Top-2,Text);
end;
end;
procedure InitializeWizard;
var
BackgroundImage:TBitmapImage;
begin
with MainForm do begin
BorderStyle:=bsNone;
Width:=GetSystemMetrics(0);
Height:=GetSystemMetrics(1);
Top:=0;
Left:=0;
end;
BackgroundImage:=TBitmapImage.Create(MainForm);
with BackgroundImage do begin
Parent:=MainForm;
Width:=MainForm.Width;
Height:=MainForm.Height;
Top:=0;
Left:=0;
end;
GradientFill(BackgroundImage,BeginColor,FinishColor);
BitmapTextOut(BackgroundImage,MainForm.Caption,'Times',3,10,8,4,clWhite);
BitmapTextOut(BackgroundImage,'2-я строка','Times',3,10,13,4,clWhite);
MainForm.Show;
WizardForm.Caption:=MainForm.Caption
end;[/more]
в этом примере фоновая форма не активируется (т.к. это MainForm) и ни каких наворотв в написании нет
Цитата: Кстати, по поводу checkboxes, рекомендую глянуть unit Themes;
я тебе пример с чекбоксами дал, чтобы показать как можно переопределить оконную процедуру у контрола, а не как заскинить приложение
в инно нет модуля Themes, если тебе нужно скинирование, то качай isskin.dll с примерами использования (все ссылки в шапке есть)