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

Вниз

Как нормально рисовать на панели?   Найти похожие ветки 

 
tytus   (2006-08-09 11:41) [0]

Доброго дня ВСЕМ!
Нужно нарисовать рисунок из ресурса на панели.
 private
   { Private declarations }
   PanelDC,PD:HDC;
   Bmp:TBitMap;

procedure TForm1.FormCreate(Sender: TObject);
begin
Bmp:=TBitMap.Create;
Bmp.LoadFromResourceName(HInstance,"PanelImage");
end;

procedure TForm1.FormPaint(Sender: TObject);
begin

PD:=GetWindowDC(Panel1.Handle);
PanelDC:=CreateCompatibleDC(0);
SelectObject(PanelDC,Bmp.Handle);
BitBlt(PD,10,10,200,200,PanelDC,0,0,SRCCOPY);
Label1.Caption:=IntToStr(PanelDC);

DeleteDC(PanelDC);
DeleteDC(PD);
end;
Так вот, если убрать строку Label1.Caption..., то не рисуется ничего вообще. А с этой строчкой метка отображает постоянно
меняющиеся цифры.
Помогите нормально нарисовать на панели.


 
clickmaker ©   (2006-08-09 12:01) [1]

PD := GetDC(Panel1.Handle);
PanelDC:=CreateCompatibleDC(PD);

....

ReleaseDC(Panel1.Handle, PD);


 
tytus   (2006-08-09 12:06) [2]

>[1]clickmaker
а воз и ныне там...


 
clickmaker ©   (2006-08-09 12:21) [3]


> tytus   (09.08.06 12:06) [2]

не заметил, что рисуешь в Form.OnPaint... Неправильно это.
Тебе принципиально рисовать именно на панели или PaintBox устроит, а может и Image?


 
tytus   (2006-08-09 13:28) [4]

[3]>clickmaker
Вот кинул кнопку, и теперь все нормально рисуется.
Но это не выход.


 
clickmaker ©   (2006-08-09 13:54) [5]


> tytus   (09.08.06 13:28) [4]

я не понимаю... если тебе контролы на панели не нужны, зачем тебе сама панель? рисовать можно и прямо на форме и на PaintBox


 
Rial ©   (2006-08-09 14:51) [6]

Создавай свой наследник от TPanel, лучше даже от TCustomPanel.
Перекрывай protected Paint; override;
ТТам рисый, что тебе надо.
И вот это

PD := GetDC(Panel1.Handle);
PanelDC:=CreateCompatibleDC(PD);

....

ReleaseDC(Panel1.Handle, PD);

Делай только один раз - при создании и удалении объекта.


 
Loginov Dmitry ©   (2006-08-09 18:03) [7]

> Rial ©   (09.08.06 14:51) [6]


Тогда уж можно переобъявить свойство Canvas, и в этом случае GetDC и ReleaseDC станут ненужными


 
Loginov Dmitry ©   (2006-08-09 18:12) [8]

Короче, использование панели для рисования малой кровью:

...
type
 TMyPanel = class(TPanel)
 public
   property Canvas;
   procedure Paint; override;
 end;

 TPanel = class(TMyPanel);

 TForm1 = class(TForm)  
 ...
 end;

...
implementation
...
procedure TMyPanel.Paint;
begin
 inherited;
 if Self.Tag = 1000 then
 begin
   // Тут рисуешь на канве
 end;
end;

Однако, использовать PaintBox все-же проще.



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

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

Наверх




Память: 0.48 MB
Время: 0.044 c
4-1146727029
Klopan
2006-05-04 11:17
2006.08.27
Службы


15-1154417219
E'n'N
2006-08-01 11:26
2006.08.27
Зачем вам нужен КПК? Как вы его используете?


15-1154323092
Ega23
2006-07-31 09:18
2006.08.27
С Днём рождения! 31 июля


2-1154938598
Yeg
2006-08-07 12:16
2006.08.27
Drag&Drop файлов из программы


2-1154342098
zamtmn
2006-07-31 14:34
2006.08.27
Как "динамический" вызать конструктор?