Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-47817
Sega
2002-04-17 09:12
2002.07.15
Hibernate


1-47324
XShura
2002-07-01 12:31
2002.07.15
Мерцание ListView


4-47886
strel
2002-05-13 18:25
2002.07.15
Ошибка при выполнении (


1-47363
andrey_pst
2002-07-02 06:32
2002.07.15
Как определить, загружена ли программа ?


1-47427
Barmaglot
2002-07-03 09:59
2002.07.15
...Забыл алгоритм взаимодействия ComboBox и Edit ...





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