Форум: "Потрепаться";
Текущий архив: 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