Apr12
категория:
Книги автор:
admin |
Одна из лучших книг для программистов. Причем не только для Delphi-программистов, хотя и ориентированна на них, но вообще для всех программистов. Я купил ее, еще не зная толком о чем она, но после того, как прочел ее (от корки до корки), понял, что втречал очень мало книг, настолько полезных и простых в изучении. В ближайшее время планирую привести пару выдержек из этой книги, а пока можете скачать ее или купить. Тем кто скачал - советую все-же купить, чтобы она всегда была под рукой. Мне, например, бумажный вариант намного более удобен.
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 используется не стандартные менеджеры памяти, а системный.
Читать далее »
Apr10
категория:
Код автор:
admin |
Мало кто знает (и еще меньше, кто использует) о такой замечательной конструкции в Delphi (начиная с Delphi 2005), как for..in.
А зря. Вот простой пример. Как можно перебрать значения в TStringList. Например так:
procedure DoStringList(AList: TStringList);
var
Idx: Integer;
begin
for Idx := 0 to High(AList) do
ShowMessage(AList[Idx]);
end;
Не сложно, но можно проще
:
procedure DoStringListNew(AList: TStringList);
var
lStr: string;
begin
for lStr in AList do
ShowMessage(lStr);
end;
Правда ведь, намного приятнее и понятнее.
Читать далее »