Kilka korekt

 avatar
user_6919294
pascal
a year ago
2.7 kB
11
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;

#endif
Editor is loading...
Leave a Comment