Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: xinyiman - Luglio 25, 2013, 06:09:50 pm

Titolo: Ridimensionamento automatico controlli
Inserito da: xinyiman - Luglio 25, 2013, 06:09:50 pm
Ciao ragazzi in un paio di giorni (a tempo persissimo) ho buttato giù un utility che permette di ridimensionare i controlli presenti su una form in maniera dinamica.

Date un occhiata all'allegato, l'esempio chiarisce bene come funziona la mia unit. Magari, anzi sicuramente esiste già qualcosa di simile, ma a me ogni tanto piace buttare via del tempo.

Aspetto vostre critiche costruttive e migliorie varie.
Su ubuntu 13.10 a 32 bit funziona bene, ditemi su altre piattaforme.
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: bonmario - Luglio 25, 2013, 06:18:30 pm
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
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: xinyiman - Luglio 25, 2013, 06:27:27 pm
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

Grazie della info bonmario, ma avevo un vecchio progetto da sistemare e così ho fatto più in fretta, aveva troppi controlli :)
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: bonmario - Luglio 25, 2013, 07:47:15 pm
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
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: xinyiman - Luglio 25, 2013, 08:08:25 pm
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

hahahahaha so come ci si sente
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: El Salvador - Luglio 26, 2013, 05:00:28 pm
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.
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: xinyiman - Luglio 26, 2013, 06:27:19 pm
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.

Si in effetti sono osservazioni sensate, appena posso aggiorno il codice e lo riposto. Su che OS hai provato?
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: xinyiman - Luglio 26, 2013, 08:44:37 pm
ok codice migliorato, ad eccezzione di

Citazione
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.

perchè magari in futuro aggiungo altri valori e quindi sarebbero sprecati. Vorrei migliorarlo con il ridimensionamento dei testi
Titolo: Re:Ridimensionamento automatico controlli
Inserito da: El Salvador - Luglio 26, 2013, 10:53:26 pm
Citazione
Su che OS hai provato?
Windows 7 32bit.

Citazione
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. :)

Lieto di esserti stato utile. :)