PDA

Visualizza la versione completa : [Delphi] Risoluzione schermo


MatAlb
18-11-2003, 20:34
Salve a tutti
Come posso "intercettare" la risoluzione dello schermo e quindi eseguire
delle operazioni, es. if (risoluzione 800x600) then ........ else if
(risoluzione 1024x768) then....
Grazie e ciao da Matteo

alka
19-11-2003, 02:05
Permettimi di dirti che, salvo esigenze particolari, gli utenti non vedono di buon occhio i cambi impliciti della risoluzione dello schermo (con tutti i problemi che possono comportare nella disposizione delle icone sul desktop, nella barra di avvio, ecc.).

Ad ogni modo, puoi ottenere facilmente la dimensione in pixel dello schermo attraverso l'oggetto Screen, disponibile per ogni applicazione Delphi in ogni unit che utilizza la "Forms.pas"; le proprietà Height e Width restituiscono rispettivamente altezza e larghezza dello schermo.

Ecco un esempio di codice:


procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Format('SCREEN Width: %d - Height: %d',
[Screen.Width, Screen.Height]));
end;


Per modificare la risoluzione, il procedimento è più complicato; comunque, puoi trovare un blocco di codice a questo indirizzo:
http://www.swissdelphicenter.ch/torry/showcode.php?id=158.

Spero di esserti stato d'aiuto.

Ciao! :ciauz:

MatAlb
19-11-2003, 10:54
Salve a tutti
Colgo l'occasione per ringraziare Marco Breveglieri e scusarmi per le inesattezze del mio messaggio.
Non intendo cambiare la risoluzione dello schermo ma adattare la form e componenti vari in essa contenuti al variare della risoluzione dello schermo, ad esempio, mi capita spesso che avviando l'applicativo su un computer che è impostato con una risoluzione diversa dal mio, di ottenere dei risultati disastrosi.
Quello che voglio fare è intercettare la risoluzione dello schermo del computer dove viene avviato l'exe e in base ad essa ridimensionare form e componenti in modo tale da mantenere le proporzioni.
L'istruzione per il ridimensionamento è scaleBy, quindi

If (risoluzione = 800x600)then scaleBy... else
If (risoluzione = 1024x768)then scaleBy...

Spero di essere stato chiaro
Ciao a tutti da Matteo

alka
19-11-2003, 11:00
Sei stato chiaro perchè rileggendo mi sono accorto di aver inteso male la domanda.

Ho avuto anche io il tuo stesso problema ma mi sono sempre astenuto dall'implementare una soluzione come quella che proponi poichè, in alcuni casi, potrebbe avere effetti disastrosi: considera una risoluzione dello schermo mediamente bassa, che genera caratteri molto piccoli, controlli disallineati tra di loro e altri piccoli effetti collaterali che rendono la tua applicazione visibile ma di fatto inutilizzabile, salvo particolari esigenze.

Se fossi in te, cercherei di valutare un'organizzazione alternativa dello spazio di lavoro dell'applicazione, magari usando dei TabSheet oppure sistemando in modo diverso i controlli in modo che il layout stesso del programma non dipenda sensibilmente dalla risoluzione utilizzata (ad esempio, potresti usare pannelli "collassabili", colonne di griglia visibili/invisibili e ridimensionabili, ecc.).

Magari prova a specificare, in generale, di che tipo di applicazione si tratta...

Ciao! :ciauz:

Genius7115
19-11-2003, 15:55
Sarà una soluzione macchinosa ma io ho risolto ridimensionando tutti i controlli di una determinata form da codice stesso.

matsoftware
19-11-2003, 17:24
Ma non è più comodo gestire il resize e la posizione con l'attributo "Anchors" dell'oggetto? Facendo così io non temo quasi nessun resize del programma (partendo da un software per un pc di 800x600 di risoluzione).

Loading