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

Вниз

Расскажите про классы форм, пжалста!!!   Найти похожие ветки 

 
Denius   (2003-09-29 17:49) [0]

Мне нужно создать форму не TFORM класса... Скока не искал чего-то мне не встречался код который был бы похож по функциям... Но уверен что люди этим занимаются и создают свои классы. К примеру те, у которых проект орейнтирован на графику, как и у меня...

Или к примеру APIшными функциями нада создать окно... В качестве класса окна мона ли использовать класс какой-нить проги? Интернет экспойлера например?

Объясните ньюбу...


 
Digitman   (2003-09-29 17:56) [1]

у тебя путаница с понятиями "форма" и "окно"

WinAPI не знает никаких "форм" и посему создавать их не умеет
но "форма" как VCL-объект умеет создавать "окно" как ОС-объект


 
Denius   (2003-09-29 19:21) [2]

Согласен, я мало в теме... Можна сказать что ньюб. Но все-таки понимаю, что форма эт тоже окно, и что собой являет понятие формы в Дельфи. Delphi-йский класс TFORM (чтоб не придерались экземпляр класса TFORM) не очень корректно работает с flash"ом - отсутствует прозрачность, зато присутствуют глюки при ресайзе... В то время как например в Visual Basic все оч красиво. Вот и стало мне интересно, а есть ли замена этому классу?


 
jonni   (2003-09-29 23:58) [3]

pomoemu ti etomu samomu TFORM mozhesh pomenyat" vse chto ugodno nachinaya ot razmerov zakanchivaya procedurami risovaniyai.... prozrachnost".. nado toka znat" s kakouy storono podoyti... v konce koncov sdelay sebe CreateWindowEx("moe lyubimoe i samoe luchshee okno") i naslazhdaysya vseme prelestyami....

v konce koncov esli ti takoy spec v Basic dak zachem tebe Delphi


 
Digitman   (2003-09-30 08:16) [4]


> не очень корректно работает с flash"ом


flash - просто технология.
если же ты ведешь речь о неком Делфи-компоненте, использующем эту технологию, то и пеняй на него)... форма-то причем ?


 
Denius   (2003-09-30 13:58) [5]

Ну значит так...
2 jonni
1. VB очень неудобен тем, что приложение написанное на нем потащит за собой туеву хучу всякиого файла. Да и политика моей конторы идет в сторону Дельфибэйсд приложений.
2. Ну типа круто CreateWindow сделать, тоже способ, тока на скока я понимаю, чтобы создать это окно нужен класс, в котором инкапсулирован этот обект. Тобищь сначала мне придется сделать RegisterClass, так ведь? Так вот, где мне взять этот класс????
3. Как и где менять процедуры отрисовки окна TForm? В каком его предке? Как винда создает прозрачность?

2Digiman Flash имеется ввиду flash.ocx иначе импорт ActivX компонента, который позволяет плеить swf-ки. Так вот импорт этого самого .ocx прекрасно работает в VB и фигово в Delphi 6 | 5 | 4... Я уже даже в разных версиях Дельфи позырил... Есть еще слух (которому можно доверять) что предыдущая версия флэша работала нормально... Но это тож не выход.

Так вот, господа, ваши советы и подсказки?


 
Rem   (2003-09-30 14:11) [6]

Import, говоришь? А какие-то олухи назвали это Object Linking and Embedding. И у них почему-то (вот западло!) OCX компонентам все равно, куда встраиваться. Или это опять Билли лоббирует Microsoft Visual Basic? Ох уж этот Билли!


 
Denius   (2003-09-30 14:26) [7]

Rem это ты к чему? Просто от нечего сказать? Или выпад в мою сторону? Типа у лоха руки кривые и он тут же начал ныть в форум про глюки в Дельфи?
Если так то, поверь мне, все возможности этого ocx"а я излазил вдоль и поперек... И если такой умник объясни мне, кто в моем случае отвечает за прорисовку мувика? Flash.ocx или TFORM?


 
Denius   (2003-09-30 14:28) [8]

И вообще вернемся в тему.
Приведите кто-нить пример создания окна(формы) любого класса отличного от TForm.


 
Digitman   (2003-09-30 14:37) [9]


> Denius


type
TMyForm = class(TForm);

...
TMyForm.Create(...); // создание объекта-формы, имеющей класс, отличный от TForm

)


 
Rem   (2003-09-30 14:39) [10]

За прорисовку во все времена отвечал Device Context (DC). И он (DC) от SDK не зависит.
А насчет прорисовки Flash-клипа классом формы ты... это... эээ... молодец! Может, у тебя найдется форма, играющая музыку?
А если к теме, то не путай класс окна, как понятие операционной системы, и класс в Object Pascal. Это совершенно разные и не связанные друг с другом понятия.


 
KSergey   (2003-09-30 15:07) [11]

Не, правда
Ну почитайте книги, блин!!!
Попробуйте на WinAPI что-либо наваять, простенькое. Примеров в инете - туева хуча, и для дельфи найдется.
Не найдется - лижит у меня примерчик, пишите письмо.

И вот когда простенькая вещь у вас заработает (окно с парой полей ввода и кнопкой "закрыть", например) - вопросов станет меньше, а толку - больше.
Это не крутость свою показываю, просто чтобы самому же было понятнее что оно и по чем.


 
Denius   (2003-09-30 15:21) [12]

Вот уже инетреснее... Окей...
Rеm, TForm это класс Object Pascal я правильно понял?
>Digitman
А, к примеру что за класс я должен указывать в RegisterClass перед тем как создать окно CreateWindowEx к примеру?

Ну и раз нету формы играющей музыку, объясни мне тогда тупенькому, почемуже такая ситуевина сложилась, что у компонента TShockWaveFlash отсутствует прозрачность если он лежит на форме TForm и все это создается на Delphi 6? Почему тада в VB все работает?


 
Palladin   (2003-09-30 15:25) [13]


> Denius (30.09.03 15:21) [12]

у тебя в глове путанница понятий winapi, object pascal и vcl
разберись с ней

вообще я не вижу конкретной проблемы, я вижу что работает и что не работает. а че там как там... это я так понял без разницы нам должно быть?


 
Digitman   (2003-09-30 15:41) [14]


> Denius


почитать, конечно, тебе "влом")

ATOM RegisterClass(

CONST WNDCLASS *lpWndClass // address of structure with class data
);


Parameters

lpWndClass

Points to a WNDCLASS structure. You must fill the structure with the appropriate class attributes before passing it to the function.

Где-то хоть какое-то упоминание о "классе формы" здесь видишь ?


 
Denius   (2003-09-30 16:02) [15]

Digitman, я тыщу раз это читал. Мне не хватает базовых знаний чтобы разобраться в 5 строках reference.
Я читал кучу мессаг в форумах, типа как создать окно функциями API и мне казалось, что типа это "окно" это что-то типа формы, Так или нет? В данном контексте?
WNDClass откуда берется? Если это не класс ObjP, то чего это такое? Где его взять?

Далее... Чтоб упростить объяснение... У ж коль вы уделяете мне столько времени...
Импортируйте в Delphi flash.ocx, создайте форму и ляпните получившийся компонент на нее... Надыбайте мувик на флеше с прозрачными участками, могу выслать, если в лом... И вы убедитесь, что нет прозрачных участков... Они просто залиты цветом background...
Хоть подскажите в какую сторону копать! Я бы сюда никогда ниче не стал постить, но после того как я пытался найти инфу в нете и не нашел, у меня просто нет мыслей в какую сторону двигаться!!!!


 
KSergey   (2003-09-30 16:31) [16]

В WinAPI есть понятие "класс окна"
Это некая структура, описывающая всякие параметры класса (конкретнее что именно описывает - см. поля структуры WNDCLASS - это она и есть)
Важно в данно контексте, что в ней хранится имя этого класса (буквально строка текстовая). Кроме того, в ней хранится указатель на call back функцию окна, которая будет вызываться для всех окон, созданых на базе этого класса и в нее и будут передаваться приходящие окну сообщения.

На основе зарегистрированных (посредством вызова RegisterClass) в системе классов можно создать окно. Окно имеет всякие свои еще свойства, некоторые берутся именно из класса, на основе которого окно создано. В частности, что важно - это функция окна.

"Приход сообщения окну" - это по сути просто вызов той самой call back функции окна системой (Windows) с указанием ей номера пришедшего сообщения. Сообщения эти генерятся всеми кому не лень: драйверами, ядром, пользовательскими программами и т.д. по всяким разным поводам.

Понятие "Класс" в тексте выше не имеет совершенно никакого отношения к классам в объектно-ориентированных языках.

Что есть TForm в delphi? Это класс дельфи в понятиях именно объектно-ориентированного языка delphi.
При создании экземпляра TForm или наследника VCL создает окно - т.е. объект в понятиях системы Windows с заранее ею же (VCL) зарегистрированного класса. Тут подробностей врать не буду - не знаю (толи под каждую форму класс регистрируется, толи под каждый тип, толи вообще на всех один - да и не суть тут важно, думаю)

Но, подозреваю, поднятого вопроса это не проясняет. Это так просто написал, настроение было. А вдруги и правда кому поможет.

По заданному вопросу есть подозрение, что ядро run-time библитотеки VB по умолчанию для окна (в понятии Windows!) выставляет стиль WS_CLIPCHILDREN, а VCL delphi - нет.
Можно попробовать поставить этот стиль (это "не прорисовывать background под дочерними окнами"). Выставляется в перекрытом методе.. ээ.. не помню. искать не охота. Что-то вроде CreateParam, но могу врать. Уточнить по имеющимся источникам, да и есть множество других способов это сделать (в частности, помнится было обсуждение, так Юрий Зотов рекомендовал какой-то другой способ, правда не особо аргументируя, кроме того что "что-то было не так, но что - не помню").


 
Digitman   (2003-09-30 16:44) [17]


> Denius


> я тыщу раз это читал


в таком случае, пардон, ты "смотришь в книгу - видишь фигу" !

ведь черным по белому написано :

Points to a WNDCLASS structure. You must fill the structure with the appropriate class attributes before passing it to the function.

"указывает на структуру (!!!), тип которой - WNDCLASS.
Вы должны заполнить эту структуру соответствующими атрибутами класса перед тем как передать указатель на нее параметром в ф-цию"

первое, что должен был подумать-сделать ты :
- а что есть структура WNDCLASS ? Жмем на гиперссылку в хэлпе для просмотра описания структуры, следующие вопросы - по назначению ее полей

- а где в Делфи есть декларация этой структуры и есть ли вообще ? Жмем "поиск файлов" с расширением *.pas в каталоге Делфи c моделью поиска "WNDCLASS", находим файл Windows.pas, внимательно изучаем

- а как форма использует все это ? Видим, что модуль Forms.pas ссылается на Windows.pas, открываем модуль Forms.pas, ищем вхождение строки "RegisterClass", внимательнейшим (!!!!!!) образом изучаем, что и при каких условиях происходит при вызове этой ф-ции у Борланда, о так и не понятом (но гораздо более конкретном !) задаем вопрос в форум !!!!


 
Denius   (2003-09-30 17:20) [18]

Последние две мессаги стоят всех остальных в этой ветке...
Спасиба огромное...
>в таком случае, пардон, ты "смотришь в книгу - видишь фигу" !
А так и есть... Я очень много прочитал всяких доков не до конца их понимая... У меня в голове образовалась каша.

Я пока пошел зырить в windows.pas? а пока напишите кто-нить подробнее про WS_CLIPCHILDREN...


 
Digitman   (2003-09-30 17:26) [19]

"зырить" нет смысла
есть смысл "изучать"


 
Denius   (2003-09-30 17:33) [20]

Вот еще небольшой вопросик:
вместе с Делфи идет куча хелпов,
расскажите в каком что искать?
Типа описание тех же сообщений ws_clipchildren???


 
Denius   (2003-09-30 17:37) [21]

Digitman? я избегаю использования слова "изучать" так как скорее всего, если мне не объяснят, то смогу тока "позырить".
и еще
Цитата:
WS_CLIPCHILDREN Исключает область, занятую дочерним окном, при выводе в родительское окно.
А на пальцах объясните,а?


 
Denius   (2003-09-30 17:48) [22]

А ну в продолжение...
Я нашел куда мона вставить этот стиль окна, в ставил в CreateWindow который используется в процедуре CreateHandle в Forms... Не помогло...
Еще идеи будут?


 
Digitman   (2003-09-30 17:48) [23]

это не сообщение
головой думать будем ?

декларации констант сообщений начинается на WM_ (Window Message)

WS_ же - это константы флагов Window Style, коль скоро речь идет о 4-м параметре ф-ции CreateWindowEx()

ход твоих рассуждений д.б. быть таким :

- ищем идентификатор "ws_clipchildren" в модуле Forms.pas, видим, что фигурирует он в составе 4-го параметра вызова ф-ции CreateWindowEx()

- жмем F1 на "CreateWindowEx", видим описание этой ф-ции и ее параметров, среди описания значений 4-го параметра нет искомого идентификатора

- открываем страничку msdn.microsoft.com, задаем модели поиска "CreateWindowEx ws_clipchildren", получаем кучу ссылок на ресурсы , погружаемся в них с головой, находим ответ на свой вопрос

- не понимаем найденное - задаем конкретный вопрос по непонятому в форум


 
Denius   (2003-09-30 17:51) [24]

Про сообщения виноват... Перепутал WM и WS


 
Игорь Шевченко   (2003-09-30 17:57) [25]

Саймона купить и будет счастье даром.
"Windows 2000 API, энциклопедия программиста"


 
Denius   (2003-09-30 18:12) [26]

А в данном случае ведь без разницы CreateWindow или CreateWindowEx? И там и там в качестве параметра указываются флаги стиля окна?


 
Rem   (2003-09-30 18:25) [27]

Delphi Help: Описание WS_CLIPCHILDREN не в CreateWindowEx() (в нем, кстати, ссылка есть), а в CreateWindow()

Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.

То-бишь, при прорисовке Child окна оно (Child окно) отсекается по границе Parent окна. Чтобы понять, что это такое, кинь на форму панель (TPanel), на эту панель - другую панель и потаскай вторую панельку внутри первой... да и за пределы вытащить попробуй... А то, что при этом получится, так и называется: Clip Children


 
Rem   (2003-09-30 18:41) [28]

Прошу прощения... это я загнул...
Короче... этот стиль WS_CLIPCHILDREN исключает область, занимаемую дочерним окном, из прорисовки родительского окна. То-есть, родительское окно не будет прорисовывать эту область. В противном случае происходит двойная прорисовка: вначале родительское окно прорисовывает область, затирая дочернее окно, а потом уж дочернее окно рисуется поверх того, что нарисовало родительское...


 
Denius   (2003-09-30 18:53) [29]

Уф... Спасибо, Rem, очень понятно объясняешь... У меня радость - я допер до этого сам... Но правда больше интуитивно... И твоя мессага меня подбодрила... Проверил я... Заделал форму запустил и... ListWnd сказал, что этот флаг зажегся... Так что похоже не в нем дело...
:(((


 
Rem   (2003-09-30 19:03) [30]

Если я правильно тебя понял... Тебе нужно что-то наподобие ассистента из Офиса 2000? Чтобы динамический рисунок с прозрачным фоном? Тогда установи свойства для формы (например, Form1):
Form1.TransparentColor := true;
Form1.TransparentColorValue := Form1.Color;

Можешь это сделать прямо в Object Inspector
А еще в Help об этом сказано:
Note: TransparentColor does not work on all systems. The application must be running under Windows 2000 or better, and the machine must be a P90 or better.


 
Denius   (2003-09-30 19:37) [31]

Нет, совсем не туда... И TransparentColor совсем не подходит...
Я просто пытаюсь у себя на форме крутить ролик сделаные на flash. Для этого импортировал flash.ocx. И все в принципе работает... Но процрачность отсутствует напрочь... Ну и проблемы при ресайзе...
А если быть уж совсем точным... Мне нужня типа кнопка... Эта кнопка на самом деле флэшка... Так наверное понятнее...


 
jonni   (2003-09-30 21:00) [32]

ti bi v konce koncov oprdelilsya chto tebe nuzhno..... knopka...okno forma......

nu esli nuzhna knopka risuy knopku..... delat" tak zhe kak i s formoy mozhno vse chto ugodno tak kak knopka eto ni chto inoe kak obiknovennoe okno ( sozdannoe kstati po CreateWindow pochti kak pravilo, esli rech o API to okno s claasom "button" i prichem bezo vsyakoy registracii classa potomu chto etot class uzhe zaregestririvan......)


 
Yttrium   (2003-10-01 03:22) [33]

Для начала чё значит вообще "прозрачность".

И какие глюки при ресайзе если енто баттон, баттоны обычно не деформируются даже при самой жестокой эксплуатации проги.

И наконец мой совет: изучить все свойства flash.ocx в vb, и поставить в Delphi такие же значения, быть может Delphi их неправильно инициализирует.


 
KSergey   (2003-10-01 05:14) [34]

33] Yttrium (01.10.03 03:22)
быть может Delphi их неправильно инициализирует.


Не "не правильно", а иначе ;)


 
Denius   (2003-10-01 15:07) [35]

Ну когда вы в дезигн-тайм создаете форму, кнопка запросто меняет размеры по вашему желанию.... да еще и двигается по форме, так ведь?
Вот и мне в моем проекта это надо реализовать.... Прозрачность флеша нужна для того, чтобы безгиморройно можно было создавать кнопки произвольной формы...


 
Denius   (2003-10-01 15:15) [36]

Yttrium, я изучил все свойства ocx...
Так вот я не тока задаю тупые вопросы... Я еще и перелапачиваю раз за разом всю эту байду. И вот чего нарыл.
Посмотрел програмкой ListWnd чем отличаются окошечки VB и Delphi в данной ситуации.
Уважаемые мастера, объясните мне, пожалста, зачем Дельфи этому ocx"у создает окно??? В VB для flasha создается окно если не указано свойство Transparent. Как только это свойство устанавливается, контрол создается как безоконный. А Дельфи на это пофиг. Окно создается в любом случае... А вот как импортировать ocx, чтобы он выглядел как Label, без окна?
Сорри за кривое объяснение...


 
KSergey   (2003-10-01 15:36) [37]

А неужели нет другого способа сделать кнопку не прямоугольную, кроме как лепить ее на основе flash?!!!
А может все же как-то иначе попробовать? А то ведь так и label"ы на форме с текстом синего или какого другого цвета можно на основе ocx от ms word"а забабахать! А еще лучше рамошки на основе CorelDraw! Там ведь обалденно красивые рамочки нарисовать можно! Вот клевая прога получится! А уж пользователь-то как обрадуется! Прямо как от получения helpa при загрузке безопасного режима в WinME - это точно в их стиле (кто видел, надеюсь понимает о чем я).
А вы не из MS сбежали, случаем?


 
Denius   (2003-10-01 15:51) [38]

Мы нет. У нас условия ставят дизайнеры... Проект пишется, чтобы им стало легче, а не для того что бы загонять их в рамки форматов.
Вопрос то на самом деле простой по своей форме! Почему flash в Дельфи не прозрачный?



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

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

Наверх





Память: 0.56 MB
Время: 0.007 c
3-65338
Чайник
2003-09-26 16:11
2003.10.20
Можно ли в гриде поменять Font отдельно взятой ячейки.


1-65434
Дмитрий
2003-10-07 15:13
2003.10.20
Подключить dll для перевода текста


3-65335
kosm
2003-09-26 12:20
2003.10.20
Класс


1-65507
DimChan
2003-10-08 10:40
2003.10.20
Сведение чисел после запятой до сотых


1-65425
oleg_art
2003-10-07 17:53
2003.10.20
Редактор свойств





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