Magari, anzi sicuramente esiste già qualcosa di simile, ma a me ogni tanto piace buttare via del tempo.
Magari, anzi sicuramente esiste già qualcosa di simile, ma a me ogni tanto piace buttare via del tempo.
A titolo informativo, la proprietà "Anchors" serve proprio a questo e, per ogni componente, puoi decidere a quali e quanti dei 4 lati vuoi ancorare il tuo controllo.
Ciao, Mario
L'ho scritto solo per facilitare la vita a gente come me: mi è capitato più volte di implementare della roba perdendoci del tempo, per poi scoprire che c'era qualcosa di già pronto.
Non sono mai stati lavori inutili, perché alla fine è tutta pratica, ma a volte questo mi ha portato ad allungare i tempi di sviluppo per inventare l'acqua calda !!!
Ciao, Mario
procedure TResizeControl.GetInfo(MyAnaliseControl: array of TMyAnaliseControl;Name: string; var Top:integer; var Left: integer; var Width: integer; var Height: integer);
var
Esci: boolean;
i: integer;
begin
Esci:=FALSE;
i:=1; //non parto da 0 perchè tanto si tratterebbe della form che è gia stata modificata a mano
while ((i<Self.MyCount)and(Esci=FALSE)) do
begin
if MyAnaliseControl[i].Name=Name then
begin
Esci:=TRUE;
Top:=MyAnaliseControl[i].Top;
Left:=MyAnaliseControl[i].Left;
Width:=MyAnaliseControl[i].Width;
Height:=MyAnaliseControl[i].Height;
end;
Inc(i);
end;
end;
Potresti usare solamente una funziona GetInfo (eliminando di fatto GetOldInfo, che è praticamente la copia esatta) aggiungendogli un altro parametro per l'array. Tipo:Codice: [Seleziona]procedure TResizeControl.GetInfo(MyAnaliseControl: array of TMyAnaliseControl;Name: string; var Top:integer; var Left: integer; var Width: integer; var Height: integer);
var
Esci: boolean;
i: integer;
begin
Esci:=FALSE;
i:=1; //non parto da 0 perchè tanto si tratterebbe della form che è gia stata modificata a mano
while ((i<Self.MyCount)and(Esci=FALSE)) do
begin
if MyAnaliseControl[i].Name=Name then
begin
Esci:=TRUE;
Top:=MyAnaliseControl[i].Top;
Left:=MyAnaliseControl[i].Left;
Width:=MyAnaliseControl[i].Width;
Height:=MyAnaliseControl[i].Height;
end;
Inc(i);
end;
end;
Inoltre nel metodo RecursiveResize ho notato che le variabili MyTop,MyLeft,MyWidth e MyHeight non vengono usate o sbaglio io a leggere il codice?
Sempre in questo metodo, potresti creare ed utilizzare un TMyAnaliseControl per immagazzinare le varie variabili Old_MyTop,Old_MyLeft,Old_MyWidth,Old_MyHeight (e quelle dette sopra, se vengono usate). In questo modo, hai solamente una variabile da dichiarare e anche la procedura GetInfo avrà solamente 3 parametri.
Sempre in questo metodo, potresti creare ed utilizzare un TMyAnaliseControl per immagazzinare le varie variabili Old_MyTop,Old_MyLeft,Old_MyWidth,Old_MyHeight (e quelle dette sopra, se vengono usate). In questo modo, hai solamente una variabile da dichiarare e anche la procedura GetInfo avrà solamente 3 parametri.
Su che OS hai provato?Windows 7 32bit.
perchè magari in futuro aggiungo altri valori e quindi sarebbero sprecati.Più che altro, usando sempre quei 4 valori insieme (top, left, width e height) devi sempre dichiararli. Invece usando un record apposta (oppurre usando un TRect), semplifichi il lavoro. :)