Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизCanvas формы. Найти похожие ветки
← →
zje (2002-06-28 14:41) [0]Надо на Canvas формы(форма fsMDIForm) надо нарисовать Panel c некоторыми control- ами ней. У панели есть Метод Panel1.PaintTo c помощью которого это можно сделать. Вызов метода размещается Form.OnPaint.
А проблема в следующем в NT2000 все это здорово работает, а вот в 9x жутко ломается.
Подскажите как заставить это в 9x работать?
Все это делается в Delphi 6.
← →
MBo (2002-06-28 14:49) [1]ээээ...
Именно нарисовать, а не просто положить TPanel на форму?
← →
zje (2002-07-01 11:07) [2]Угу. Именно нарисовать. Если просто панель положить на форму, то она будет поверх дочерних окон.
← →
MBo (2002-07-01 11:16) [3]может, поможет
http://www.lmc-mediaagentur.de/dpool/tips04/0359.htm
← →
valery_f (2002-07-01 12:02) [4]> zje © (28.06.02 14:41) ...а вот в 9x жутко ломается
А что ломается то? Че пишет?
← →
zje (2002-07-01 16:13) [5]Спасибо за ссылку. Я ее уже видел просто хотелось сделать как бы по проще.
В onPainte формы пишу следующее:
Panel1.PaintTo(Canvas , 10 , ClientHeight - Panel1.Height - 10);
Refresh;
Если Refresh убрать, то работает но криво (форма не перерисовывается при изменении размеров, появляется как бы несколько панелей).
А с Refresh в 9х прога падает со словами "Программа выролнила недопустимую операцию и будет закрыта" (сбой при обращении к странице памяти).
← →
DeMoN-777 (2002-07-01 21:32) [6]
← →
Юрий Зотов (2002-07-01 22:47) [7]Бедняга 9x. И NT тоже. Уж и так, и сяк их ломают... А они, хоть и ломаются, но пока живут...
Смотрим хелп:
procedure PaintTo(DC: HDC; X, Y: Integer);
Что Вы передаете в первом параметре? Canvas. А надо что? DC. Так чему же удивляться?
Только тому, что это вообще как-то работает, даже и под 2k.
Panel1.PaintTo(Canvas. Handle , ...);
И не надо ругаться на 9x. Не она виновата...
← →
zje (2002-07-03 10:35) [8]Привет.
К сожелению Ваш совет не помог.
Хотя я действительно был неправ там нужен handle, но это почему то делу не помоглою. В nt как работало так и работает, под 9х как падала так и падает. :(
← →
Skier (2002-07-03 11:36) [9]>zje
Свой код в onPaint-e не покажешь ?
← →
zje (2002-07-03 12:10) [10]Да конечно.
Просто создается новое приложение. Главная форма fsMDIForm.
Кладется панель. Ставиться у панели visible = False.
Желательно на панель что-нибудь положить, типа календаря.
В OnPaint-е формы пишется следующее:
Panel1.PaintTo(Canvas.Handle , 10 , ClientHeight - Panel1.Height - 10);
Refresh;
В принципет даже Refersh можно закомментировать, вроде и безнего падает.
Попробуйте у кого время есть.
← →
Skier (2002-07-03 12:16) [11]>zje
Извини конечно, но... может объяснишь в кратце
зачем тебе именно такой способ отрисовки.
Может можно как-то иначе всё это сделать ?
Т.е. что ты хочешь иметь в итоге ??
← →
zje (2002-07-03 13:01) [12]Мне то это не надо, где то начальство углядело как в MDI (главной форме) нарисована какая та бадяга и тоже захотели.
Вот и требуется что внутри этой MDI рамки было что то нарисовано,
например, календарь.
Так что вот теперь мучаюсь.
← →
Skier (2002-07-03 13:05) [13]>zje
А нельзя ли просто положить на главную форму - календарь ?
← →
valery_f (2002-07-03 13:16) [14]> zje © (03.07.02 12:10)
Refresh там действительно лишний... Щас попробовал - кинул на пустую форму (FormStyle=fsMDIForm) панель (на всякий случай - на нее еще контролов), сразу поставил ей Visible=false и сделал OnPaint формы:
procedure TForm1.FormPaint(Sender: TObject);
begin
Panel1.PaintTo(Canvas.Handle,10,10);
end;
Все работает. Видимо что-то ты там еще намутил... Начни с минимально работающего варианта.
> Юрий Зотов © (01.07.02 22:47) Что Вы передаете в первом параметре? Canvas. А надо что? DC.
В шестерке метод PaintTo имеет две реализации - можно рисовать и на Canvas и на DC (проверил оба варианта - ОК).
← →
zje (2002-07-03 14:05) [15]Так есно работает, а ты именно так попробуй. :)
Panel1.PaintTo(Canvas.Handle , 10 , ClientHeight - Panel1.Height - 10</b);
Refresh
Нужно что бы рисовалось внизу формы, причем корректно при изменние ее размеров.
← →
Skier (2002-07-03 14:07) [16]>zje
> ...при изменние ее размеров
Так может быть тогда использовать OnResize или WM_SIZE;
← →
zje (2002-07-03 16:31) [17]К сожалению OnResize не подходит для этих целей :(
← →
valery_f (2002-07-03 16:39) [18]> zje © (03.07.02 14:05) ...ClientHeight - Panel1.Height - 10...
Все нормально, ничего не падает, правда без Refresh - если его вызывать в OnPaint - начнется бесконечная рекурсия и выскочит Stack overflow.
> zje © (03.07.02 14:05) ...при изменние ее размеров
О, это отдельный гемор. Винда пытается, насколько это возможно, пореже вызывать перерисовку. В результате при уменьшении размера окна сообщение на перерисовку вообще может не прийти (мы просто отсекаем часть уже нарисованного), а при увеличении винда может ограничить область перерисовки добавимшимся куском. В общем, попробуй устраивать принудительную перерисовку в OnResize формы. Если не выйдет - кинь мне на мыло, посмотрим "на месте".
← →
Skier (2002-07-03 16:39) [19]>zje
Если я правильно понял, то тебе нужно
> рисовалось внизу формы, причем корректно при изменние ее
> размеров
???
И тебя не волнует каким способом это сделать ? Так ?
Если так, то пришли мне код по почте и по-подробней
напиши что бы ты хотел сделать
← →
zje (2002-07-03 17:21) [20]Всем желающим исходник выслал.
Буду весьма признателен запомощь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.015 c