![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TPanel - прорисовка [D5, D7, WinXP]
Al500 © (2007-09-02 14:00:00)Подскажите пожалуйста, каким образом можно нарисовать на компоненте 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 раза нажать на кнопку для получения желаемого.
Спасибо.
GrayFace (2007-09-04 16:52:00) [1]> ....чем не панель?
А вот не панель и все тут! :) Не TWinControl - иногда это плохо. Правда, не в этом случае.
Al500, в первом посте не нужно создавать Canvas - он и так есть. TPanel.Canvas.
Leonid Troyanovsky (2007-09-03 11:41:00) [2]
> Al500 (03.09.07 11:37) [7]
> Дело в том что PaintBox не совсем устраивает, слишком много
> панелей
Если панелей слишком много, то тем более PaintBox.
--
Regards, LVT.
Al500 (2007-09-03 11:37:00) [3]to Германн
да ладно вам
Дело в том что PaintBox не совсем устраивает, слишком много панелей, не хотелось бы захламлять проект еще больше.
Германн (2007-09-03 03:08:00) [4]
> {RASkov} © (03.09.07 01:30) [3]
>
> > [2] Инс © (02.09.07 21:32)
>
> +1
> Вот тоже не понимаю зачем использовать, то что для этого
> не предназначено и игнорировать как раз то, что для этих
> целей и делалось...
>
>
Что смог "надыбать", то и использует :)
{RASkov} (2007-09-03 01:47:00) [5]> DrawText(..,PChar(Caption)...) просто выводит заголовок окна....
Если нужна надпись на "панели"(т.е. подделку из паинта) и не нужен Хинт этой самой "поделки",
то можно воспользоваться им(Хинтом(Hint)) в качестве Кэпшена...
DrawText(PaintBox1.Canvas.Handle, PChar(PaintBox1.Hint), -1, R, DT_VCENTER or DT_CENTER or DT_SINGLELINE);
В общем.... думаю, мысль понятна....
В итоге получилась изумительная панель, на которой можно рисовать как угодно :)
{RASkov} (2007-09-03 01:34:00) [6]> ...это "примитивный" пример - как можно обойтись без того, чего не нужно для этого:)
Это собственно было сказано ко всему коду в целом, а не для DrawText как у меня получилось :)
{RASkov} (2007-09-03 01:30:00) [7]> [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 - например.
Инс (2007-09-02 21:32:00) [8]А какое отношение FormPaint имеет к рисованию на панели? Если нужно, чтобы рисунок не затерся при перерисовке, то в простейшем случае можно бросить на панель TPaintBox и рисовать в обработке события OnPaint этого компонента.
Вася Правильный (2007-09-02 17:24:00) [9]
> TForm_main. FormPaint
> данный код повесить на ButtonClick
на размышления не наводит название метода?