Форум: "Основная";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c