Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.039 c
15-1192960107
homm
2007-10-21 13:48
2007.11.25
Вопрос по асемблеру.


15-1193146097
Иван
2007-10-23 17:28
2007.11.25
Работа с двоичными файлами


15-1193139603
oldman
2007-10-23 15:40
2007.11.25
MTV RUS позорит страну (оффтоп, но все таки)!


2-1193744235
Blind Guardian
2007-10-30 14:37
2007.11.25
obj.items[i] и obj[i] - что быстрее? вопрос про default property


2-1194007977
BATTLE_MAX
2007-11-02 15:52
2007.11.25
Сохранение TImageList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский