Форум: "Прочее";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
ВнизВизуальные компоненты на TDataModule Найти похожие ветки
← →
KSergey © (2007-10-22 12:47) [40]> Игорь Шевченко © (22.10.07 12:40) [38]
> > удобствами IDE, такими как изменение расположения и размеров ?
> изменение расположения и размеров кого ?
Присоединяюсь к вопросу.
Если вы о TButton, к примеру, то советую внимательно посмотреть на uses в модуле StdCtrls
← →
DevilDevil © (2007-10-22 12:48) [41]> Сергей М. © (22.10.07 12:42) [39]
> if (csDesign in MyComponent.State) then .. дизайн-тайм
> - поведение компонента такое-то ..else .. ран-тайм - поведение
> компонента иное
А вот так вот можно ?if (csDesign in MyComponent.State) then
uses Forms;
> Как не компилируя в приложение код модуля "Forms", пользоваться
> удобствами IDE, такими как изменение расположения и размеров ?
> изменение расположения и размеров кого ?
см. сабж.
← →
KSergey © (2007-10-22 12:52) [42]> DevilDevil © (22.10.07 12:48) [41]
> > изменение расположения и размеров кого ?
> см. сабж.
Вообще-то не хорошо посылать нах. отвечающих. Они ведь и правда могут уйти. Или ответ в общем-то не интересует?
А по сути - ответ прост: посмотрите внимательно последнюю фразу в KSergey © (22.10.07 12:47) [40]
← →
DevilDevil © (2007-10-22 12:52) [43]> KSergey © (22.10.07 12:47) [40]
type
TMyVisualComponent = class(TComponent)
published
property Left : integer
property Top : integer
property Width : integer
property Height : integer
end;
я хочу:
1) не компилировать модуль "Forms"
2) изменять Bounds-свойства моего компонента не только из инспектора объектов, но и визуально, как изменяются аналогичные свойства TWinControl-ов
← →
KSergey © (2007-10-22 12:53) [44]> DevilDevil © (22.10.07 12:48) [41]
> А вот так вот можно ?
> if (csDesign in MyComponent.State) then
> uses Forms;
А попробовать?
← →
DevilDevil © (2007-10-22 12:55) [45]> KSergey © (22.10.07 12:53) [44]
))))
← →
DevilDevil © (2007-10-22 12:56) [46]вопрос открыт.
лучше бы пришёл DimaBr и внёс ясность...
← →
KSergey © (2007-10-22 12:56) [47]> DevilDevil © (22.10.07 12:52) [43]
> type
> TMyVisualComponent = class(TComponent)
>
> published
> property Left : integer
> property Top : integer
> property Width : integer
> property Height : integer
> end;
>
> я хочу:
> 1) не компилировать модуль "Forms"
> 2) изменять Bounds-свойства моего компонента не только из
> инспектора объектов, но и визуально, как изменяются аналогичные
> свойства TWinControl-ов
И это вы называете "визуальными компонентами??!! А тельзя ли было это изначаль уточнить???
а) посмотреть про GraphControl и наследников, но сильно подозреваю, что и там Forms не избежать :)
б) думаю проще всего наваять свой редактор, пусть внешний, что не сложно. Правда, к IDE он не будет иметь никакого отношения :)
PS
Правила игры меняются с каждым постом. Что же дальше-то будет?
← →
KSergey © (2007-10-22 12:57) [48]> DevilDevil © (22.10.07 12:56) [46]
> вопрос открыт.
> лучше бы пришёл DimaBr и внёс ясность...
Снегурочка!
Снегурочка!
А ну ка, хором!!
← →
Игорь Шевченко © (2007-10-22 12:59) [49]
> см. сабж.
см. http://ln.com.ua/~openxs/articles/smart-questions-ru.html
до полного и окончательного просветления.
← →
Сергей М. © (2007-10-22 12:59) [50]
> DevilDevil © (22.10.07 12:48) [41]
> А вот так вот можно ?
> if (csDesign in MyComponent.State) then
> uses Forms;
>
Какие тебе нафих компоненты, если ты языка программирования не знаешь ?)
← →
DevilDevil © (2007-10-22 13:10) [51]ёёёёёёёёёёёёёёёёё..........
1) вопрос был задан в ветке "компоненты" и только потом, стало быть по ошибке, перенесён в текущую. Там почти все знают разницу между TForm/TFrame и TDataModule.
2) Все контролы наследованы от TControl, который находится в модуле "Controls.pas", который юзает модуль Forms, следовательно линкоет то, что мне абсолютно не нужно (читай "мешает"). Однако невизуальные компоненты типа таймера на Датамодуле разместить можно.
3) > KSergey © (22.10.07 12:56) [47]
мне пофиг, визуальным он будет или нет (в рамках Delphi), главное, чтобы мышкой у него можно было менять размеры, и чтобы его использование не приводило к компиляции модуля Forms.
4)> Сергей М. © (22.10.07 12:59) [50]
cv 3)
5)> Игорь Шевченко © (22.10.07 12:59) [49]
не подскажите, что я неясно язъясняю
← →
Сергей М. © (2007-10-22 13:20) [52]
> cv 3)
Мда ..
У попа была собака..
← →
DevilDevil © (2007-10-22 13:33) [53]возможно, стоит рассказать, зачем же мне так извращаться...
Делаю простой графический движочек, главное окно на API. Оконная функция имеет ряд особенностей (например, не разворачиваться на весь экран при нажатии на Maximize-кнопку) и т.д. Если использовать Forms, то будет мешаться Application, MainForm, ... да и, что уж тут скрывать, лишние 200кб таскать не хочется.
Далее передо мной встала проблема расположения элементов, ну игровых кнопок например! Вообще часть рутины по созданию, удалению, изменению свойств и обработки событий можно избежать средствами IDE Delphi, используя связку TDataModule-TComponent; зачему, модуль Forms при этом задействован не будет!
Тем не менее, всех проблем не решишь. Так, говоря об игровых кнопках, крайне важно в режиме редактирования задавать им координаты и размеры. Представьте проектирование интерфейса вслепую! Такие проблемы впринципе решаются созданием внешних редакторов (в известном движке "Asphyre", например)... Согласитесь, все удобства IDE вручную реализовать достаточно трудно, один ObjectInspector только чего стоит.
Потом мне вспомнились всем известные KOL&MCK, редактирование в которых происходит стандартно, а внутри работало используя совершенно иную технологию.
На форум я обратился для того чтобы мне подсказали, как решить мою задачу максимально просто.
← →
DevilDevil © (2007-10-22 13:35) [54]> Сергей М. © (22.10.07 13:20) [52]
Выражёвывайся яснее, чего ты хочешь от меня услышать.
Про тот флаг я знаю прекрасно, использовать его буду в рантайм.
Вопрос в другом: как совместить несовместимое, как изменять размеры невизуального компонента.
P.S. всё в рамках терминологии Delphi конечно
← →
DevilDevil © (2007-10-22 13:36) [55]правка:
Про тот флаг я знаю прекрасно.
← →
Сергей М. © (2007-10-22 13:43) [56]
> как изменять размеры невизуального компонента
Никак.
У невизуального компонента не может быть "размеров", за исключением разве что размеров иконки, которым компонент представлен.
← →
DevilDevil © (2007-10-22 13:57) [57]> Сергей М. © (22.10.07 13:43) [56]
моя задача решаема. Возьмём хотя бы KOL&MCK.
следовательно, используя схожую технологию (делать зеркала, например), положительного результата я добьюсь.
Однако мне не ясен сам механизм: как проектирование ведётся в TForm, а код работает совершенно иной. Буду благодарен за разъяснения.
← →
Сергей М. © (2007-10-22 13:59) [58]
> проектирование ведётся в TForm
Что, по-твоему, есть "проектирование" ?
← →
Игорь Шевченко © (2007-10-22 14:01) [59]
> Однако мне не ясен сам механизм: как проектирование ведётся
> в TForm, а код работает совершенно иной. Буду благодарен
> за разъяснения.
Почему бы не задать этот вопрос автору MCK ? вроде в соседней конференции, которая KOL, найдется больше желающих дать разъяснения.
> да и, что уж тут скрывать, лишние 200кб таскать не хочется.
Это паранойя
← →
DevilDevil © (2007-10-22 14:11) [60]> Сергей М. © (22.10.07 13:59) [58]
> > проектирование ведётся в TForm
> Что, по-твоему, есть "проектирование" ?
Ты MCK использовал? Берёшь с виду обычные компоненты с вкладки KOL, кидаешь на TForm, настраиваешь все необходимые тебе свойства, изменяешь размеры кнопок и т.д. А когда запускаешь на выполнение такую программу, там не то что TWinControl-ов, там TComponent-ов не используется!
> Почему бы не задать этот вопрос автору
MCK ? вроде в соседней
> конференции, которая KOL, найдется больше желающих дать
> разъяснения.
по двум причинам. Во-первых, вопрос касается компонентов впринципе, а не применных в MCK технологий вчастности. Во-вторых, я не уверен, что пользоваться нужно будет именно этой технологией, пока я спрашиваю, каков принцип.
> Это паранойя
не суть. кроме размеров емеется ряд других проблем. Сабж не об этом.
← →
Сергей М. © (2007-10-22 14:17) [61]
> Ты MCK использовал?
Нет, и не намерен.
Ловля блох все эти "КОЛ-МСК")
← →
DevilDevil © (2007-10-22 14:24) [62]> Ловля блох все эти "КОЛ-МСК")
холивар. сабж не в этом.
← →
Игорь Шевченко © (2007-10-22 14:25) [63]
> Во-вторых, я не уверен, что пользоваться нужно будет именно
> этой технологией, пока я спрашиваю, каков принцип.
Технология описана в описании MCK. В режиме разработки используются обычные наследники TControl, а код генерируется для компонент KOL. И вся радость.
← →
DevilDevil © (2007-10-22 14:32) [64]> Игорь Шевченко © (22.10.07 14:25) [63]
1) каким образом, изменяя свойства, можно "генерировать код" ?
2) как бы это выразиться... почему запуская VCL-приложение, запускается KOL- приложение ?
← →
Игорь Шевченко © (2007-10-22 14:34) [65]DevilDevil © (22.10.07 14:32) [64]
Ты странный. И хочешь странного. Тебе уже не один раз посоветовали почитать описание MCK, однако, похоже, ни на что, кроме ответов в твоей персональной ветке, у тебя читалка не настроена. Я тебе готов рассказать про то, как устроены альтернативные дизайнеры и кодогенераторы, но за деньги.
← →
DevilDevil © (2007-10-22 15:02) [66]> Игорь Шевченко © (22.10.07 14:34) [65]
я так полагаю, всё можно объяснить в двух словах.
если нет, то необходимо вышеупомянутой вами "описание MCK".
мои поиски успехом не увенчались.
логичнее задавать подобный вопрос в соседней ветке... что я собственно и сделал.
В любом случае, участникам спасибо за помощь.
Если есть предположения, как поизящнее справиться с моей проблемой - пишите.
← →
Eraser © (2007-10-22 15:11) [67]
> DevilDevil © (22.10.07 13:33) [53]
> Если использовать Forms, то будет мешаться Application,
> MainForm
не будет, если грамотно к вопросу подойти.
> да и, что уж тут скрывать, лишние 200кб таскать не хочется.
если это решающий фактор, то повторю, то что писал в другой ветке.. delphi - не лучший выбор, в данном случае.
← →
Игорь Шевченко © (2007-10-22 15:15) [68]
> я так полагаю, всё можно объяснить в двух словах.
Да, только эти два слова будут очень дорого стоить
← →
DevilDevil © (2007-10-22 15:20) [69]> Eraser © (22.10.07 15:11) [67]
> > DevilDevil © (22.10.07 13:33) [53]> Если использовать
> Forms, то будет мешаться Application, MainForm
> не будет, если грамотно к вопросу подойти.
муторно больно. уж проще MCK освоить )
> если это решающий фактор, то повторю, то что писал в другой
> ветке.. delphi - не лучший выбор, в данном случае.
Delphi в моём случае чуть ли не идеальный вариант )
> Игорь Шевченко © (22.10.07 15:15) [68]
каков критерий оценки стоимости слов, "произнесённых" на форуме "Мастеров Delphi" ?
← →
KSergey © (2007-10-22 15:30) [70]> DevilDevil © (22.10.07 15:20) [69]
> каков критерий оценки стоимости слов, "произнесённых" на
> форуме "Мастеров Delphi" ?
Кол-во времени (в рублях), потраченное на их отыскание этих слов, поделенное на интересность проблемы.
Иногда интересность и меньше единицы бывает.
← →
Anatoly Podgoretsky © (2007-10-22 19:18) [71]> DevilDevil (22.10.2007 15:20:09) [69]
Твоих или Игроря?
← →
homm © (2007-10-22 19:34) [72]> [11] DevilDevil (19.10.07 20:20)
> Вообще говоря, есть идейка одна... категорически не хочется
> использовать модуль Forms, а возможность изменения координат
> и размеров необходимы.
Ты считаешь, избавившись от Forms съекономишь дофига размера ехе? Forms — вершина айзберга, использовав любой оконный компонент, ты потянешь за сосбой всю VCL.
← →
DevilDevil (2007-10-22 21:09) [73]> homm © (22.10.07 19:34) [72]
использовав любой TControl или прилиyковав модуль "Dialogs", ты заюзаешь модуль "Forms", вследствие чего "ты потянешь за сосбой всю VCL" .
Вообще пришёл к выводу, что использование Windows, SysUtils, Classes, Graphics - минимальный стартовый набор. И весит порядка 120кб.
P.S. не хочу холивар по поводу размера )
← →
DimaBr © (2007-10-23 15:35) [74]Приветствую ! К сожалению очень редко заглядываю в остальные ветки кроме компонентов.
Всколзь прочитал ветку, ничо не понял.
Начнём сначала. Объясните народу и мне в том числе, что Вы задумали. Такое ощущение, что вы копаете не там где нужно. Чем вас не устраивает VCL.
← →
Anatoly Podgoretsky © (2007-10-23 16:00) [75]> DimaBr (23.10.2007 15:35:14) [74]
Копает там где светло.
← →
DevilDevil © (2007-10-23 19:48) [76]> DimaBr © (23.10.07 15:35) [74]
Чем вас не устраивает VCL.
> Anatoly Podgoretsky © (23.10.07 16:00) [75]
> > DimaBr (23.10.2007 15:35:14)
> [74]Копает там где светло.
Мне необхоимо автосоздание/автоудаление и условия изменения свойств у игровых объектов. Для этого впринципе достаточно связки TDataModule+TComponent.
Ну а остальное впринципе описано вDevilDevil © (22.10.07 13:33) [53]
← →
DimaBr © (2007-10-24 08:54) [77]Немного ясно, остаётся вопрос, как вы создаёте кнопки ?
И зачем отказ от VCL, жалко 200 кб, сожмите EXE-шник UPX-om
← →
Anatoly Podgoretsky © (2007-10-24 09:57) [78]> DimaBr (24.10.2007 08:54:17) [77]
А лучше таблетки от жадности
← →
DimaBr © (2007-10-24 11:12) [79]
> Anatoly Podgoretsky © (24.10.07 09:57) [78]
В смысле ?
← →
DevilDevil © (2007-10-24 15:29) [80]> DimaBr © (24.10.07 08:54) [77]
> Немного ясно, остаётся вопрос, как вы создаёте кнопки ?
эээ... немного муторно объяснять.
упростим вариант кнопки до :TGameButton = class (TGameObject)
private
...
FScreenRect : TRect;
constructor Create(const ScreenRect : TRect; OnClickEvent : TOnClickEvent);
end;
ну и где то в коде, при старте проргаммы я вызываю конструктор кнопки с константными параметрами, а при закрытии программы не забываю удалять.
Следующий шаг эволюции...
Имею какой-то хранитель компонентов (TDataModule
), который отвечает за автоматическое создание/удаление, автоматическое сохранение/загрузку свойств (Left, Top, Width, Height
) и удобный доступ к событиюOnClick
.
На следующем шаге эволюции хочется не только мышью изменять координаты и размеры, но и эмулировать отображение таких кнопок.
> И зачем отказ от VCL, жалко 200 кб, сожмите EXE-шник UPX-om
я не отказываюсь от VCL, я отказываюсь от модуля Forms в EXE-шнике. Всё уже написано под API, под TForm переписывать неоправдано нудно. Есть пара вещей на низком уровне, которые если и можно реализовать под VCL, то крайне сложно.
P.S. вопрос наверное можно считать закрытым. буду использовать фичу, применяемую в KOL&MCK: в дизайн-тайм работает код зеркала, а компилируется другой код. В дизайн-тайм TMainForm будет наследоваться от TForm, а компилироваться как от TDataModule. В дизайн-тайм TGameButton будет наследоваться от TCustomControl, а компилироваться будет из другого модуля, где TGameButton наследуется от TComponent. При этом функция автоматического создания/удаления, сохранения/загрузки свойств и событий сохранится.
Но в любом случае спасибо за оказание внимания моему вопросу.
Отдельно хотелось бы поблагодарить homm© и Danger© ответы в ветке "KOL".
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.044 c