Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.25;
Скачать: CL | DM;

Вниз

TPanel - прорисовка   Найти похожие ветки 

 
Al500   (2007-09-02 14:00) [0]

Подскажите пожалуйста, каким образом можно нарисовать на компоненте Panel;
Делаю таким образом:
procedure TForm_main.FormPaint(Sender: TObject);
var Bitmap : TBitMap;
Canv_p : TControlCanvas;
begin
 Bitmap := TBitmap.Create;
 Canv_p := TControlCanvas.Create;
 Canv_p.Control:= form_main.Panel1;
 try
   with Bitmap do begin
     Handle := LoadBitmap(0, PChar(OBM_MNARROW));
     Transparent := True;
//      TransParentColor := BitMap.canvas.pixels[50,50];
     Canv_p.Draw(10,10,BitMap);
 end;
 finally
   Bitmap.Free;
 end;

end;

Если данный код повесить на ButtonClick, необходимо 2 раза нажать на кнопку для получения желаемого.
Спасибо.


 
Вася Правильный   (2007-09-02 17:24) [1]


> TForm_main.FormPaint
>  данный код повесить на ButtonClick

на размышления не наводит название метода?


 
Инс ©   (2007-09-02 21:32) [2]

А какое отношение FormPaint имеет к рисованию на панели? Если нужно, чтобы рисунок не затерся при перерисовке, то в простейшем случае можно бросить на панель TPaintBox и рисовать в обработке события OnPaint этого компонента.


 
{RASkov} ©   (2007-09-03 01:30) [3]

> [2] Инс ©   (02.09.07 21:32)

+1
Вот тоже не понимаю зачем использовать, то что для этого не предназначено и игнорировать как раз то, что для этих целей и делалось...

> Al500
Вот... Даже и панель не нужна(лишние хендлы они не всегда оправдываются)...
рисуем прямо на канве паинта:
................
 type
   TForm1 = class(TForm)
   PaintBox1: TPaintBox;
.........
   Bmp: TBitmap;
   { Private declarations }
 end;

var Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Bmp:=TBitmap.Create;
 Bmp.LoadFromFile("<имя файла с картинкой для фона "панели">");
 PaintBox1.Width:=185; PaintBox1.Height:=41;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Bmp.Free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var R: TRect;
begin
 R:=PaintBox1.ClientRect;
 BitBlt(PaintBox1.Canvas.Handle, 4, 4, PaintBox1.Width-8, PaintBox1.Height-8, Bmp.Canvas.Handle, 0, 0, SRCCOPY);
 DrawEdge(PaintBox1.Canvas.Handle, R, BDR_RAISEDOUTER , BF_RECT);
 SetBkMode(PaintBox1.Canvas.Handle, TRANSPARENT);
 DrawText(PaintBox1.Canvas.Handle, PChar(Caption), -1, R, DT_VCENTER or DT_CENTER or DT_SINGLELINE);
end;


....чем не панель?

DrawText(..,PChar(Caption)...) просто выводит заголовок окна.... это "примитивный" пример как можно обойтись без того чего не нужно для этого:)
Ну если нужен хендл этого "добра" тогда, да..... или [2] или перекрыть метод Paint у панели.... в новом, своем, классе...TMyPanel - например.


 
{RASkov} ©   (2007-09-03 01:34) [4]

> ...это "примитивный" пример - как можно обойтись без того, чего не нужно для этого:)

Это собственно было сказано ко всему коду в целом, а не для DrawText как у меня получилось :)


 
{RASkov} ©   (2007-09-03 01:47) [5]

> DrawText(..,PChar(Caption)...) просто выводит заголовок окна....

Если нужна надпись на "панели"(т.е. подделку из паинта) и не нужен Хинт этой самой "поделки",
то можно воспользоваться им(Хинтом(Hint)) в качестве Кэпшена...
DrawText(PaintBox1.Canvas.Handle, PChar(PaintBox1.Hint), -1, R, DT_VCENTER or DT_CENTER or DT_SINGLELINE);
В общем.... думаю, мысль понятна....
В итоге получилась изумительная панель, на которой можно рисовать как угодно :)


 
Германн ©   (2007-09-03 03:08) [6]


> {RASkov} ©   (03.09.07 01:30) [3]
>
> > [2] Инс ©   (02.09.07 21:32)
>
> +1
> Вот тоже не понимаю зачем использовать, то что для этого
> не предназначено и игнорировать как раз то, что для этих
> целей и делалось...
>
>

Что смог "надыбать", то и использует :)


 
Al500   (2007-09-03 11:37) [7]

to Германн
да ладно вам
Дело в том что PaintBox не совсем устраивает, слишком много панелей, не хотелось бы захламлять проект еще больше.


 
Leonid Troyanovsky ©   (2007-09-03 11:41) [8]


> Al500   (03.09.07 11:37) [7]

> Дело в том что PaintBox не совсем устраивает, слишком много
> панелей

Если панелей слишком много, то тем более PaintBox.

--
Regards, LVT.


 
GrayFace ©   (2007-09-04 16:52) [9]

> ....чем не панель?
А вот не панель и все тут! :) Не TWinControl - иногда это плохо. Правда, не в этом случае.

Al500, в первом посте не нужно создавать Canvas - он и так есть. TPanel.Canvas.



Страницы: 1 вся ветка

Текущий архив: 2007.11.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1194260362
ProgRAMmer Dimonych
2007-11-05 13:59
2007.11.25
TMemoryStream (ограничения)


15-1192806374
Slider007
2007-10-19 19:06
2007.11.25
С днем рождения ! 19 октября 2007 пятница


3-1184321322
Bogdan1024
2007-07-13 14:08
2007.11.25
тип параметра "множество"


2-1193726020
IntruderLab
2007-10-30 09:33
2007.11.25
FastReport 3.0 переменные


2-1193818997
bioSerg
2007-10-31 11:23
2007.11.25
Invalid Floating Point Operation и NAN