Apr11
категория:
Код автор:
admin |
Когда-то, очень давно, я не мог понять, почему код, подобный тому, что ниже, возвращал не правильный результат:
function GetText: string;
begin
Result := Result + '...';
end;
procedure TForm1.FormCreate(Sender: TObject);
var
lStr: string;
Idx: Integer;
begin
lStr := 'Text';
for Idx := 1 to 3 do
lStr := lStr + '.';
Label1.Caption := lStr;
lStr := GetText;
Label2.Caption := lStr;
end;
Как по вашему, что будет в Label2? Если вы думаете, что там будет '...', то вы сильно ошибаетесь, как и я в то время.
Читать далее »
Apr11
категория:
Код автор:
admin |
Иногда бывает необходимо объеденить два (и более) изображений в одно, но с учетом прозрачности. Конечно, для этого можно использовать маски, регионы и т.д., но зачем, если есть возможность использовать GDI? Вот простой способ:
var
lBmpBack, lBmpTop: TBitmap;
lBlend: TBlendFunction;
begin
lBmpBack := TBitmap.Create;
lBmpTop := TBitmap.Create;
try
// Загружаем фоновое изображение
lBmpBack.LoadFromFile('demo.bmp');
lBmpBack.PixelFormat := pf32bit;
// Загружаем изображение, которое будем накладывать
lBmpTop.LoadFromFile('delphist.bmp');
lBmpTop.PixelFormat := pf32bit;
// Устанавливаем параметры наложения
lBlend.BlendOp := AC_SRC_OVER;
lBlend.BlendFlags := 0;
lBlend.SourceConstantAlpha := 170;
lBlend.AlphaFormat := AC_SRC_ALPHA;
// Накладываем
if Windows.AlphaBlend(lBmpBack.Canvas.Handle, // Исходное изображение
(lBmpBack.Width - lBmpTop.Width) div 2,
(lBmpBack.Height - lBmpTop.Height) div 2,
lBmpTop.Width,
lBmpTop.Height,
lBmpTop.Canvas.Handle, // Накладываемое изображение
0,
0,
lBmpTop.Width,
lBmpTop.Height,
lBlend) then
Image1.Picture.Assign(lBmpBack)
else
ShowMessage('Ошибка. Не удалось наложить изображение.');
finally
lBmpTop.Free;
lBmpBack.Free;
end;
end;
П. С. Последние и самые резонансные новости, которые произошли во Львове и Львовской областе, в которую входит Миколаївський район, Вы можете узнать посетив информационный ресурс mykolaiv.info. А на ваши вопросы всегда готовы быстро и информативно ответить активные пользователи форума.
Apr11
категория:
Код автор:
admin |
В принципе, это не новая заметка, а дубль с форума, на котором я когда-то это уже опубликовал. Но, как говорится, "повторение - мать учения".
Суть в следующем - если вам необходимо передавать строковые данные между программой и dll, то используйте для этого тип WideString. В этом случае вам не придется подключать никакие менеджеры памяти, т.к. для WideString используется не стандартные менеджеры памяти, а системный.
Читать далее »