![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование на Panel
Bor © (2007-12-18 23:37:00)Здравствуйте, уважаемые мастера!
У меня чего-то опять ничего не получается. Можно ли рисовать на Panel?
Делал так:
bmp: TBitmap;
-------------
bmp:=TBitmap.Create;
bmp.LoadFromFile('picture.bmp');
Panel1.Brush.Bitmap:=bmp;
Но ничего не менялось.
{RASkov} (2007-12-19 14:14:00) [1]> То есть PaintBox с разрисованной канвой можно использовать
> вместо панели?
> PaintBox использовать вместо меток тоже не хочется.
И почему все так боятся использовать ПаинтБокс? :)
А ведь его борландцы как раз для этих целей придумали)
> Вообще по идее подошел бы и Label, но он не может выравнивать
> текст по центру, и также при включенных темах его фон сбрасывается...
На счет фона и тем не знаю, но вот выравнивать текст лабел умеет... См. Alignment и Layout
Washington (2007-12-19 13:24:00) [2]Да не за что )
Виктор007 (2007-12-19 13:22:00) [3]Спасибо... что-то я совсем притупел :(
Washington (2007-12-19 13:19:00) [4]А что цвет панели в clBlue выставить и Caption прописать нельзя?
Виктор007 (2007-12-19 13:13:00) [5]У меня еще вопрос, как установить обработчик onPaint для панели. Мне нужна простая синяя панель с белым текстом по центру - но при включеных темах Windows цвет панели меняется на серый, в итоге белого текста не видно... Вообще по идее подошел бы и Label, но он не может выравнивать текст по центру, и также при включенных темах его фон сбрасывается...
PaintBox использовать вместо меток тоже не хочется.
Виктор007 (2007-12-19 13:00:00) [6]Вот, в DelphiWorld нашел:
У всех компонентов, порожденных от TCustomControl, имеется свойство Canvas типа TCanvas. Грубо говоря, это аналог TDC из OWL. Те операции, которые нельзя выполнить с помощью методов TCanvas, можно выполнить с помощью WinAPI. Для этого у обьектов класса TCanvas имеется свойство Handle - это и есть Хэндл Дисплейного Контекста ОС Windows (HDC), который необходим графическим функциям WinAPI. Если свойство Canvas недоступно, Вы можете достучаться до него созданием потомка и переносом этого свойства в раздел Public.
type
TcPanel = class(TPanel)
public
property Canvas;
end;
А если у объекта нет свойства Canvas (у TDBEdit, вpоде-бы нет), по кpайней меpе в D3 можно использовать класс TControlCanvas. Пpимеpное использование:
var
cc: TControlCanvas;
...
cc := TControlCanvas.Create;
cc.Control := youControl;
...
и далее как обычно можно использовать методы Canvas.
Washington (2007-12-19 12:44:00) [7]То есть PaintBox с разрисованной канвой можно использовать вместо панели?
{RASkov} (2007-12-19 12:40:00) [8]> [15] Washington © (19.12.07 12:36)
А какая разница??? Рисовать или "вставить" - чем отличаются?
Washington (2007-12-19 12:36:00) [9]Ну мне не рисовать, а готовую картинку надо было вставить.
{RASkov} (2007-12-19 12:35:00) [10]> [13] Washington © (19.12.07 12:24)
> А почему ужасно?
>
> P.S. Просто интересно, т.к. я так делал
Ты расскажи о великой надобности, в этом "нелегком деле", панели.... Да и TImage зачем?
Если всего-то необходимо нарисовать нечто на канве.....)
А, ну да, забыл.... у нас же мощные компы :)
Washington (2007-12-19 12:24:00) [11]А почему ужасно?
P.S. Просто интересно, т.к. я так делал. Может переделать надо.
{RASkov} (2007-12-19 11:31:00) [12]> [11] Washington © (19.12.07 11:25)
ужасно.... (
:)
Что в самом деле проще, так это взять, как советуют, ПаинтБокс и не извращаться)
ЗЫ У нас же "компы" совремнные что нам до этих ресурсов.... подумаешь хэндлы(
:о)
Washington (2007-12-19 11:25:00) [13]А нельзя на панель кинуть Image и загрузить в него картинку. ИМХО проще
Рамиль (2007-12-19 09:22:00) [14]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
{ Public declarations }
end;
TExtPanel = class(TPanel);
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
TExtPanel(Panel1).Canvas.MoveTo(1, 1);
TExtPanel(Panel1).Canvas.LineTo(100, 100);
end;
end.
Loginov Dmitry (2007-12-19 07:57:00) [15]> У TPanelа ведь нет TCanvas
Есть. Точно также, как и у любого другого контрола.
homm (2007-12-19 00:42:00) [16]> [7] Bor © (19.12.07 00:10)
> И как быть?
Рисовать?
Bor (2007-12-19 00:10:00) [17]
> homm
Ну, да, действительно. И как быть?
Efir (2007-12-19 00:09:00) [18]var
C:TCanvas;
begin
C:=TCanvas.Create;
try
C.Handle:=GetDC(Panel1.Handle);
C.LineTo(10,10);
finally
C.Free;
end;
end;
homm (2007-12-18 23:54:00) [19]> [0] Bor © (18.12.07 23:37)
> Можно ли рисовать на Panel?
Закон не запрещает.
> bmp:=TBitmap.Create;
> bmp.LoadFromFile('picture.bmp');
> Panel1.Brush.Bitmap:=bmp;
>
> Но ничего не менялось.
А должно? Где здесь рисование то?
fics (2007-12-18 23:51:00) [20]Ну подскажите тогда как быть, мне тоже интересно будет узнать, а если неправда извеняюсь.