Kilka korekt
user_6919294
pascal
a year ago
2.7 kB
13
Indexable
{
Hej Daria, ulepszyłem tobie kod, po mojemu - Profesionaliscie :)
Krótko
- Dodałem stałą MAX_ADV_IMAGES określającą maksymalną liczbę obrazków reklamowych.
- Zdefiniowałem nowy typ TAdvImage, który zawiera zarówno obrazek, jak i jego podpowiedź (hint).
- Zmienbiłem tablicę advImage na AdvImages, która przechowuje elementy typu TAdvImage.
- Poprawiłem nazewnictwo funkcji i zmiennych, aby były bardziej opisowe i zgodne z konwencjami.
- Dodałem sprawdzenie, czy URL nie jest pusty przed wywołaniem ShellExec w procedurze AdvImageOnClick.
- Zmieniłem procedurę SetAdvImg na LoadAdvImages, która teraz tworzy i inicjalizuje obiekty TBitmapImage.
- Zaktualizowałem procedurę SetAdvImageHints, aby ustawiała podpowiedzi zarówno dla obrazka, jak i dla rekordu TAdvImage.
- Dodałem procedurę CleanupAdvImages do zwalniania pamięci zajmowanej przez obrazki.
}
#ifdef ADV
const
ADV_WIDTH = 120;
ADV_HEIGHT = 160;
ADV_SPACING = 5;
MAX_ADV_IMAGES = 5; // dodamy maksymalna liczba obrazków reklamowych
type
TAdvImage = record
Image: TBitmapImage;
Hint: string;
end;
var
AdvImages: array[0..MAX_ADV_IMAGES-1] of TAdvImage;
procedure AdvImageOnClick(Sender: TObject);
var
ErrorCode: Integer;
URL: string;
begin
if Sender is TBitmapImage then
begin
URL := TBitmapImage(Sender).Hint;
if URL <> '' then
ShellExec('open', URL, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
end;
procedure LoadAdvImages(const ImageFiles: array of string);
var
i: Integer;
AdvTop, AdvLeft: Integer;
begin
AdvTop := LabelTime1.Top + 20;
AdvLeft := 5;
for i := Low(ImageFiles) to High(ImageFiles) do
begin
if i >= MAX_ADV_IMAGES then
Break;
if not FileExists(ExpandConstant('{tmp}\' + ImageFiles[i])) then
ExtractTemporaryFile(ImageFiles[i]);
AdvImages[i].Image := TBitmapImage.Create(WizardForm);
with AdvImages[i].Image do
begin
Parent := WizardForm.InstallingPage;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\' + ImageFiles[i]));
AutoSize := False;
SetBounds(AdvLeft, AdvTop, ADV_WIDTH, ADV_HEIGHT);
Cursor := crHand;
OnClick := @AdvImageOnClick;
end;
AdvLeft := AdvLeft + ADV_WIDTH + ADV_SPACING;
end;
end;
procedure SetAdvImageHints(const Hints: array of string);
var
i: Integer;
begin
for i := Low(Hints) to High(Hints) do
begin
if i >= MAX_ADV_IMAGES then
Break;
AdvImages[i].Hint := Hints[i];
AdvImages[i].Image.Hint := Hints[i];
end;
end;
procedure CleanupAdvImages;
var
i: Integer;
begin
for i := 0 to MAX_ADV_IMAGES-1 do
begin
if Assigned(AdvImages[i].Image) then
AdvImages[i].Image.Free;
end;
end;
#endifEditor is loading...
Leave a Comment