Italian community of Lazarus and Free Pascal

Programmazione => LCL => Topic aperto da: Dankan1890 - Agosto 20, 2026, 09:18:46 pm

Titolo: Problema posizione di apertura di TColorDialog
Inserito da: Dankan1890 - Agosto 20, 2026, 09:18:46 pm
Salve a tutti,
aprendo un TColorDialog da un pulsante di un form, questo si apre sempre sul margine sinistro, esiste il modo di posizionarlo diversamente ? magari sotto il pulsante che esegue l'apertura ?
Titolo: Re:Problema posizione di apertura di TColorDialog
Inserito da: DragoRosso - Agosto 20, 2026, 10:52:56 pm
Ammesso che tu stia parlando di Windows ... potrebbe essere che lo stesso codice funzioni anche in Linux (anche se Wayland non aiuta).

Vedi l'immagine, sono due righe di codice ... ma funzionano solo in Delphi.
In Lazarus l'api di windows sembra non fare effetto ...

Qualcuno sicuramente più ferrato di me ti può dare una dritta.

Comunque essenzialmente si tratta di convertire le coordinate della Form in coordinate "schermo" poi sommando la posizione del pulsante (che è in relazione alla Form) e un Delta di 10 pixel si riposiziona la dialog.

Questo è il codice che và eseguito nell'evento OnShow della dialog (la si abbina a DesignTime.

Codice: [Seleziona]
rocedure TForm1.ColorDialog1Show(Sender: TObject);
Var F: TPoint;
begin
  //La Form si trova sempre a 0,0 ---> F conterrà la posizione assoluta in pixel nello schermo
  F := Form1.ClientToScreen(Point(0,0));
  SetWindowPos(ColorDialog1.Handle, 0, F.X+Button1.Left, F.Y+Button1.Top+Button1.Height+10, 0, 0, 5);
  //Il valore 5 finale fà ignorare l'analisi della dimensione e l'eventuale nuovo handle.
end;
Titolo: Re:Problema posizione di apertura di TColorDialog
Inserito da: Dankan1890 - Agosto 21, 2026, 12:12:16 am
@DragoRosso ti ringrazio per la risposta, purtroppo cercavo / speravo in una soluzione cross-platform e che funzioni con Lazarus, essendo parte di alcune modifiche al componente FpReport (per il momento ad uso personale).

Se non c'è una soluzione portatile, penso di ripiegare su dei form personalizzati.