Текущий архив: 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.028 c