Newsgroup: it.comp.lang.delphi
Titolo: Usare il canvas di un TPANEL

Ciao a tutti,
    ho un problema con il canvas del tpanel ..... non c'e' !!!!
Ho cercato su internet e ho trovato questo trucco
type
  TPanel = class(ExtCtrls.TPanel)
  public
    property Canvas;
  end;
Di fatto usando un tpanel normale si riesce ad usare il canvas riferito a 
quel pannello ma ....
se cerco di disegnare una rettangolo prima dello showmodal il rettangolo non 
viene visualizzato.
Se invece metto la costruzione del rettangolo in un evento onclick di 
qualsiasi oggetto, il rettangolo viene visualizzato dopo
2-3-4 click a discrezione del computer.
Qualche suggerimento su come costruire un rettangolo in un pannello usando 
il canvas e visualizzarlo in contemporanea con la form ?
Grazie
Ciao, Daniele
PS : Segue il codicillo ......
type
  TPanel = class(ExtCtrls.TPanel)
  public
    property Canvas;
  end;
type
  TFAL = class(TForm)
    PE: TPanel;
    procedure PEClick(Sender: TObject);
  private
    { Private declarations }
    Oggetto : String;
    Procedure DisegnaEtichetta;
  public
    { Public declarations }
  end;
Function OK(Oggetto : String) : Boolean;
Begin
  FAL:=TFAL.Create(Application);
  Try
    FAL.Oggetto:=Oggetto;
    FAL.DisegnaEtichetta;
    FAL.ShowModal; // il rettangolo non viene disegnato
  Finally
    FreeAndNil(FAL);
  End;
End;
Procedure TFAL.DisegnaEtichetta;
Begin
    PE.Canvas.Rectangle(10,10,10,10);
End;
procedure TFAL.PEClick(Sender: TObject);
begin
    DisegnaEtichetta; // il rettangolo viene disegneto a volte dopo il primo 
click, a volte dopo 2 click e avolte dopo 3-4 click
end;

 [...]
Crea un discendente del controllo *TPanel* e ridefinisci il metodo 
/Paint/ con la direttiva *override* per inserire all'interno le tue 
"personalizzazioni grafiche" richiamando i metodi dell'oggetto Canvas, 
che sarà presumibilmente accessibile, rendendo persistenti le modifiche 
che apporti (in quanto le istruzioni che inserisci e che disegnano sulla 
superficie del pannello vengono eseguite ogni volta che è necessario 
aggiornare la rappresentazione a video del pannello stesso).
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 aggiornare la rappresentazione a video del pannello stesso).
Usare una stringGrid con una sola cella e sfruttare la proprietà on
draw ?

 draw ?
AH AH AH... sei un grande!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Usare una stringGrid con una sola cella e sfruttare la proprietà on
draw ?
prova così...
procedure TForm1.BitBtn3Click(Sender: TObject);
var M : TGridRect;
begin
StringGrid1.RowCount:=1;
StringGrid1.ColCount:=1;
StringGrid1.ColWidths[0]:=StringGrid1.Width;
StringGrid1.RowHeights[0]:=StringGrid1.Height;
StringGrid1.FixedCols:=0;
StringGrid1.FixedRows:=0;
StringGrid1.Options:=[];
StringGrid1.ScrollBars:=ssNone;
M.Top:=StringGrid1.Row; M.Bottom:=M.Top; M.Left:=StringGrid1.ColCount
+1; M.Right:=M.Left;
StringGrid1.Selection:=M;
StringGrid1.BorderStyle:=bsNone;
StringGrid1.Enabled:=false;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow:
Integer;
  Rect: TRect; State: TGridDrawState);
var R : TRect;
begin
R.Top:=Rect.Top+5;
R.Bottom:=R.Top+10;
R.Left:=Rect.Left+2;
R.Right:=Rect.Right-2;
StringGrid1.Canvas.Brush.Color:=clRed;
StringGrid1.Canvas.FillRect(R);
end;

 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Anche il Troll può dare soluzioni ;-)

 quel pannello ma ....
Il consiglio corretto è quello di Marco (ignora quelli di tale "Frazy"). 
Il metodo Paint() è comune a tutti i TCustomControl (come TPanel, appunto).
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 Il metodo Paint() è comune a tutti i TCustomControl (come TPanel, appunto).
Ok allora se riesci a tenere allineato il disegno quando minimizzi la
form e la ritiri su senza menate fammi un fischio..

 form e la ritiri su senza menate fammi un fischio..
Il fatto che *tu*, trollino, non riesca a farlo, non vuol dire che non si
possa fare. E comunque... fiuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu...


 possa fare. E comunque... fiuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu...
Purtroppo non lo fa Delphi in modo semplice soprattutto conn handle
derivati dalla Form principale che con finestra aperte da li passano
sopra al pannello....
Fai copia e incolla del mio codice, vedrai che le cose vanno benone...

Effettivamente funziona anche con il metodo di Marco. ma anche con il
mio senza fare tutto quel casino
ripeto usando una stringgrid con una sola cella
var M : TGridRect
SG1.RowCount:=1;
SG1.ColCount:=1;
SG1.ColWidths[0]:=StringGrid1.Width;
SG1.RowHeights[0]:=StringGrid1.Height;
SG1.FixedCols:=0;
SG1.FixedRows:=0;
SG1.ScrollBars:=ssNone;
SG1.Enabled:=false;
M.Top:=SG1.Row; M.Bottom:=M.Top; M.Left:=SG1.ColCount+1;
M.Right:=M.Left;  SG1.Selection:=M;
end;

 aggiornare la rappresentazione a video del pannello stesso).
Grazie per l'aiuto ..... ho fatto !!!!!
Va tutto bene !!!!
Adesso posso andare a nanna !!!
Alla prossima !!
Ciao,
Daniele 

 Il consiglio corretto è quello di Marco (ignora quelli di tale "Frazy").
Finito adesso adesso ....
Tutto ok !!
 Inoltre andando a settare in modo corretto l'evento onresize si adatta alle 
nuove dimensioni in modo eccellente senza dare alcuna anomalia.
Grazie ancora,
Ciao Daniele
PS : Causa lavoro .... pc spento per 1 settimana .... ci sentiamo per gli 
auguri ! 

 ripeto usando una stringgrid con una sola cella [...]
"Ripeto" è proprio la parola giusta... pretendo un "troll" decente, che 
sia almeno abbastanza arguto da non menzionare sempre la solita 
"copiata/incollata" soluzione che coinvolge costantemente un controllo 
StringGrid.
Nemmeno il più distratto dei newbye scambierebbe le tue soluzioni per 
veri suggerimenti, è come fare scherzi riuscendo ogni volta a farsi 
scoprire... che gusto c'è, a parte quello di fare continuamente una 
figuraccia?
Per contro, le poche volte che mi capita di usare il controllo 
StringGrid, devo ammettere che penso a te... ;-)


 StringGrid, devo ammettere che penso a te... ;-)
Ok. in ogni caso il codice che ho postato funziona...

 PS : Causa lavoro .... pc spento per 1 settimana .... ci sentiamo per gli auguri !
Meno male, fai cosa gradita...

 Meno male, fai cosa gradita...
straquoto....

 sopra al pannello....
BUAHAHAHAHAH...
Ti prego resta in questo gruppo a sparare le tue cagate.
Promettici che non vai via. Sei troppo divertente.


 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Purtroppo ho un aereo che mi aspetta tornerò dai miei polli verso
ottobre 2008 per il prossimo Natale..
Ciao ciao :-D
dal Troll

 Purtroppo ho un aereo che mi aspetta 
se se... ah ah ah...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
