Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];

Вниз

Сначала рисую на TPanel, затем App.Minimize, then restore - рисун   Найти похожие ветки 

 
allrussia   (2002-05-24 05:05) [0]

ок исчезает с панельки. Или если форму передвинуть тоже. Как лечится?


 
Delphi5.01   (2002-05-24 07:34) [1]

tebe nado sdelat sleduushee v eventax formi viberi onpaint nado risovat vse izobrajenie formi vot togda nichego ne isportitsa.


 
allrussia   (2002-05-25 02:32) [2]

Фишка в том, что я рисую, когда прога уже в памяти, а не пока она грузится


 
SPeller   (2002-05-25 06:34) [3]

2allrussia

Это вполне естественно. При перерисовке окна твоё изображение стирается. У меня тоже такая же трудность была. Весь прикол в том, что у панели нет события OnPaint и рисуется он после других событий. Я вышел из этой ситуации созданием своего компонента панели, идентичного обычной но со свойством OnPaint:

unit mypanel;

interface
uses extctrls,classes;

type
TMyPanel = class(TCustomPanel)
private
FOnBeforePaint:TNotifyEvent;
FOnAfterPaint:TNotifyEvent;
procedure Paint;override;
public
property DockManager;
published
property Align;
property Alignment;
property Anchors;
property AutoSize;
property BevelInner;
property BevelOuter;
property BevelWidth;
property BiDiMode;
property BorderWidth;
property BorderStyle;
property Caption;
property Color;
property Constraints;
property Ctl3D;
property UseDockManager default True;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property FullRepaint;
property Font;
property Locked;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnCanResize;
property OnClick;
property OnConstrainedResize;
property OnContextPopup;
property OnDockDrop;
property OnDockOver;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnBeforePaint:tnotifyevent read fOnBeforePaint write fOnBeforePaint;
property OnAfterPaint:tnotifyevent read fOnAfterPaint write fOnAfterPaint;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
end;

implementation

procedure tmypanel.Paint;
begin
if assigned(onbeforepaint)then onbeforepaint(self);
inherited;
if assigned(onafterpaint)then onafterpaint(self);
end;

end.


В своей проге пишу так:

uses ..., mypanel;

type
TForm1 = class(TForm)
Panel2: TPanel;
//Она лежит на форме и мы делаем с ней всё что нужно, не обращая внимания на то что она обычная, ставим ей нужные свойства.
....
private
....
public
Panel: TmyPanel;//Нужная нам панель
end;
....

procedure TForm1.FormCreate(Sender: TObject);
begin
panel:=tmypanel.Create(self);
with panel do begin //Передаём нашей панели свойства той что на форме валяется
left:=panel2.Left;
top:=panel2.Top;
height:=panel2.Height;
width:=panel2.Width;
color:=panel2.Color;
borderstyle:=panel2.BorderStyle;
onafterpaint:= colorboxselect; //Сюда ставим процедуру обработчик
parent:=self;
visible:=true;
end;
panel2.Visible:=false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
panel.Free;
end;


 
allrussia   (2002-05-25 08:19) [4]

Спасибo


 
Proton   (2002-05-25 09:55) [5]

Рисуй не на панели на на TImage->Picture->bitmap, или обрабатывай WM_PAINT панели и перерисовывай заново.У RX есть Window Hook.


 
SPeller   (2002-05-25 11:00) [6]

Proton (25.05.02 09:55)

Толку не будет. Сначала он поймает WM_PAINT, нарисует, а потом отрисуется сама панель. и его рисунок соответственно сотрётся.


 
Севостьянов Игорь   (2002-05-26 00:08) [7]

SPeller © (25.05.02 11:00)
Совсем не обязательно, если поставить inherited перед тем как отрисовать картинку

Отрисуется панель (inherited), а потом picture.update
Сообщение то от панели, а не рисунка


 
SPeller   (2002-05-26 07:08) [8]

2Севостьянов Игорь © (26.05.02 00:08)

inherited помоему ставится не в хуках, а в Дельфийском обработчике сообщения, который ставится внутри класса:

type TPanel = class(TCustomPanel)
....
FOnPaint(...);message WM_PAINT;
.....

Для этого ведь надо лезть внутрь класса, или создавать свой как в моём первом примере. Не изменять же базовый класс


 
SuperShadow   (2002-05-26 08:20) [9]

А почему бы не использовать TPaintBox?


 
Proton   (2002-05-26 10:42) [10]

2SPeller
а попробывать слабо? у RXHook есть событие BefoteMessage и AfterMessage - то беж до и после. Ну а если сам хукаеш то юзать надо SetWindowLong
в качестве парама кидай GWL_WNDPROC, и там сначало вызывай стандартный проц через CallWindowProc а за тем делай все остальное.
Мне кажется что создавать свой класс для такой простой поцедуры это как бы сказать ... :)



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

Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
14-18140
IGOREK
2002-04-28 05:49
2002.06.06
А мне не нравятся правила бойцовского клуба!!!


1-18025
S@shka
2002-05-24 13:51
2002.06.06
Передача данных из одной формы в другую...


14-18122
PaRL
2002-04-29 19:01
2002.06.06
Цены...


3-17821
Uncle_m16
2002-05-15 22:19
2002.06.06
диалект


6-18073
Michael_Burahin
2002-03-22 16:38
2002.06.06
Как из программы загрузить файл с сервера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский