Newsgroup: it.comp.lang.delphi
Titolo: Centrare il titolo nella barra

Chiedo scusa se ne apro uno nuovo, ma in quello precedente ho notato che 
c'è una rissa in corso.
Ma è davvero così difficile? Mi ricordo di aver trovato il codice in 
giro per il web ma poi l'ho perso a causa di problemi hard disk e non lo 
avevo neanche scritto.
Però funzionava bene anche in altri pc.
Comunque non è importante per il mio lavoro, volevo solo fare qualcosa 
di diverso.
Un aiuto è sempre bene aceto.
Grazie a tutti Ciao.
 
--- posted by geoForum on 
http://www.delphiedintorni.it

 di diverso.
Tralasciando il fattore estetico, che secondo me sa molto di Windows 
3.1, sì, effettivamente non è affatto facile. Ti confesso che io ho 
provato a cercare un bel po' in giro, se non altro per mettere fine a 
trollamenti vari, ma non ho trovato niente che faccia al caso tuo... 
quindi il mio consiglio è: lascia perdere. Se vuoi fare qualcosa di 
diverso, dovrai inventarti qualcos'altro, magari che non abbia a che 
fare con il comportamento standard di windows :)
-- 
Jax

 sì, effettivamente non è affatto facile.
Beh, dai, non proprio (scopiazzando il codice del link fornito nell'altro 
thread):
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    private
     procedure WMNCPaint(var Msg: TWMNCPaint) ; message WM_NCPAINT;
     procedure WMNCACTIVATE(var Msg: TWMNCActivate) ; message WM_NCACTIVATE;
     procedure DrawCaptionText() ;
   end;
var
  Form1: TForm1;
implementation
uses jclStrings;
{$R *.dfm}
procedure TForm1.DrawCaptionText;
const
   captionText = 'Titolo Centrato';
var
   canvas: TCanvas;
   Titolo: String;
   intLunghTitolo: integer;
begin
   canvas := TCanvas.Create;
   try
     // recupero il canvas del titolo
     canvas.Handle := GetWindowDC(Self.Handle) ;
     with canvas do
     begin
       // Imposto come meglio mi pare
       Brush.Style := bsClear;
       Font.Color := clRed;
       // faccio un po' di conti per centrare il titolo
       // da migliorare
       intLunghTitolo := Length(captionText);
       intLunghTitolo := intLunghTitolo * Self.Font.Size + 15;
       // Uso una funzione già fatta per pigrizia
       Titolo := strCenter(captionText, self.Width div 2 - intLunghTitolo, ' 
');
       TextOut(0, 6, Titolo) ;
     end;
   finally
     ReleaseDC(Self.Handle, canvas.Handle) ;
     canvas.Free;
   end;
end;
procedure TForm1.WMNCACTIVATE(var Msg: TWMNCActivate);
begin
   inherited;
   DrawCaptionText;
end;
procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
   inherited;
   DrawCaptionText;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption := '';
end;
end.
Non molto testato ma dovrebbe funzionare.
Va sicuramente migliorato il calcolo del "centro" dalla caption.
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio 

 Va sicuramente migliorato il calcolo del "centro" dalla caption.
Si potrebbe usare TextExtent forse?
-- 
Jax

 Si potrebbe usare TextExtent forse?
Hai ragione! Non mi ricordavo che esistesse. E' molto meglio.
Per sfizio, ci riprovo, con qualche modifica:
uses JclGraphUtils;
<..>
procedure TForm1.DrawCaptionText;
const
   captionText = 'Titolo Centrato';
var
   canvas: TCanvas;
   intLunghTitolo: TSize;
   PosXYTitolo : TPoint;
begin
   canvas := TCanvas.Create;
   try
     // recupero il canvas del titolo
     canvas.Handle := GetWindowDC(Self.Handle) ;
     with canvas do
     begin
       // Imposto come meglio mi pare il font
       Brush.Style := bsClear;
       Font.Color := clRed;
       // calcolo le dimensioni del form
       PosXYTitolo := RectCenter(Canvas.ClipRect);
       // calcolo le dimensioni del titolo
       intLunghTitolo := TextExtent(CaptionText);
       // lo scrivo.
       TextOut(PosXYTitolo.X - (intLunghTitolo.cx div 2), 6 , CaptionText) ;
     end;
   finally
     ReleaseDC(Self.Handle, canvas.Handle) ;
     canvas.Free;
   end;
end;
Ciao
ACSH