Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.
// numero Colonne
i := 0;
iNumImg := 0;
while i <= Self.ClientWidth do
begin
iNumImg := iNumImg + 1;
i := i + Image1.Width;
end;
iNumColonne := iNumImg;
// numero righe
iNumImg := 0;
while i <= Self.ClientHeight do
begin
iNumImg := iNumImg + 1;
i := i + Image1.Height;
end;
iNumRighe := iNumImg;
//in totale serviranno n Immagini
iNumImg := iNumRighe * iNumColonne;
//Crea TImage
for i := 0 to iNumImg do
begin
BmpX[i] := TImage.Create(nil);
BmpX[i].Width := Image1.Width;
BmpX[i].Height := Image1.Height;
//si assegna alla TImage(n) il contenuto della Image1 inserita sul Form
BmpX[i].Picture.Bitmap := Image1.Picture.BitMap;
end;
//Crea TImage per Panel
for i := 0 to iNumColonne do
begin
BmpT[i] := TImage.Create(nil);
BmpT[i].Width := Image1.Width;
BmpT[i].Height := Image1.Height;
//si assegna alla TImage(n) il contenuto della Image1 inserita sul Form
BmpT[i].Picture.Bitmap := Image1.Picture.BitMap;
end;
//Disegna TImage
for i := 0 to iNumImg do
begin
//crea img orizzontali
BmpX[i].Left := iPosizioneX;
BmpX[i].Top := iPosizioneY;
BmpX[i].Parent := Self;
BmpX[i].Show;
//nuova posizione orizzontale
iPosizioneX := BmpX[i].Left + BmpX[i].Width;
//se Posizione sinistra > Larghezza Client
//disegna img verticali
if (BmpX[i].Left + Image1.Width) > Self.ClientWidth then
begin
iPosizioneY := BmpX[i].Top + BmpX[i].Height;
iPosizioneX := Image1.Left;
end;
end;
//Elimina tutte le TImage create
for i := 0 to iNumImg do BmpX[i].Free;
//Disegna TImage
iPosizioneX := 0;
for i := 0 to iNumColonne do
begin
//crea img orizzontali
if i > 0 then
iPosizioneX := BmpX[i].Left + BmpX[i].Width;
BmpT[i].Left := iPosizioneX; //nuova posizione
BmpT[i].Top := 0;
BmpT[i].Parent := Panel1;
BmpT[i].Show;
//nuova posizione
iPosizioneX := BmpT[i].Left + BmpX[i].Width;
SpeedButton1.BringToFront;
SpeedButton2.BringToFront;
SpeedButton3.BringToFront;
procedure TForm1.FormResize(Sender: TObject);
begin
EliminaArrayBmp; //Elimina Array BitMap
DisegnaBmp; //crea e Disegna BitMap
end;
procedure TForm1.DisegnaBmp;
var
i, iPosizioneX, iPosizioneY, iNumColonne, iNumRighe: integer;
begin
iNumColonne := 0;
iNumRighe := 0;
iPosizioneX := 0;
iPosizioneY := Panel1.Top + Panel1.Height;
iPosizioneY := 0;
//Verifica Numero Immagini Vertcali su Form
//volendo risparmiare un po' di Bmp (se la Bmp e' piccola) si puo' cambiare la posizione Verticale di partenza
i := 0; //iPosizioneY
iNumImg := 0;
while i <= Self.ClientHeight do
begin
iNumImg := iNumImg + 1;
i := i + Image1.Height;
end;
iNumRighe := iNumImg;
//Verifica Numero Immagini Orizzontali su Form
i := 0;
iNumImg := 0;
while i <= Self.ClientWidth do
begin
iNumImg := iNumImg + 1;
i := i + Image1.Width;
end;
iNumColonne := iNumImg;
iNumImg := iNumRighe * iNumColonne;
Self.Caption := '- Bitmap necessarie : ' + IntToStr(iNumImg);
Self.Refresh;
//Crea TImage
for i := 0 to iNumImg do
begin
BmpX[i] := TImage.Create(nil);
BmpX[i].Width := Image1.Width;
BmpX[i].Height := Image1.Height;
BmpX[i].Picture.Bitmap := Image1.Picture.BitMap;
end;
//Crea TImage per Panel
for i := 0 to iNumColonne do
begin
BmpT[i] := TImage.Create(nil);
BmpT[i].Width := Image1.Width;
BmpT[i].Height := Image1.Height;
BmpT[i].Picture.Bitmap := Image1.Picture.BitMap;
end;
iPosizioneX := Image1.Left;
//Disegna TImage
for i := 0 to iNumImg do
begin
//crea img orizzontali
BmpX[i].Left := iPosizioneX;
BmpX[i].Top := iPosizioneY;
BmpX[i].Parent := Self;
BmpX[i].Show;
//nuova posizione
iPosizioneX := BmpX[i].Left + BmpX[i].Width;
//se Posizione sinistra > Larghezza Client
//disegna img verticali
if (BmpX[i].Left + Image1.Width) > Self.ClientWidth then
begin
iPosizioneY := BmpX[i].Top + BmpX[i].Height;
iPosizioneX := Image1.Left;
end;
end;
//Disegna TImage
iPosizioneX := 0;
for i := 0 to iNumColonne do
begin
//crea img orizzontali
if i > 0 then
iPosizioneX := BmpX[i].Left + BmpX[i].Width;
BmpT[i].Left := iPosizioneX; //nuova posizione
BmpT[i].Top := 0;
BmpT[i].Parent := Panel1;
BmpT[i].Show;
//nuova posizione
iPosizioneX := BmpT[i].Left + BmpX[i].Width;
end;
SpeedButton1.BringToFront;
SpeedButton2.BringToFront;
SpeedButton3.BringToFront;
end;
procedure TForm1.EliminaArrayBmp;
var
i: integer;
begin
//Elimiuna tutte le TImage create
for i := 0 to iNumImg do
BmpX[i].Free;
end;