Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизСвои компоненты Найти похожие ветки
← →
CodeMaster © (2009-02-09 10:55) [0]Я пишу программу на чистом API без использования VCL, возникает вопрос как мне создать свои компоненты в API не трогая при этом VCL? На VCL создавать всё гораздо проще TCustomControl помогает, но в API такой расслабухи нету и я теперь не знаю что-делать, подскажите.
Заранее спасибо.
← →
Сергей М. © (2009-02-09 11:05) [1]Наследуйся от TComponent
← →
CodeMaster © (2009-02-09 11:20) [2]Да но как потом функцией CreateWindowEx вызвать компонент?
← →
Rouse_ © (2009-02-09 11:25) [3]В принципе можно посмотреть как это сделано в КОL, там тоже VCL не тянется...
← →
Сергей М. © (2009-02-09 11:26) [4]
> как потом функцией CreateWindowEx вызвать компонент?
Чавой-то ?
CreateWindowEx не предназначена для "вызова компонентов".
Мало того, ни одна WinAPI-функция знать ничего не знает и знать не может ни о каких "компонентах" - в то время как строгалась Windows, среда Делфи с ее компонентами не существовала вообще или находилась в пуберантном периоде
← →
CodeMaster © (2009-02-09 11:38) [5]Ну а тогда каким образом мне вывести на форму компоненты?
← →
Anatoly Podgoretsky © (2009-02-09 11:40) [6]> CodeMaster (09.02.2009 10:55:00) [0]
АПИ не поддерживает и не совместим с TComponent
← →
CodeMaster © (2009-02-09 11:40) [7]вот таким образом создаётся главная форма:
var
wc: TWndClass;
hWindow: HWND;
Msg: TMsg;
begin
wc.lpszClassName := "POGiPlayer";
wc.lpfnWndProc := @MainWndProc;
wc.Style := CS_VREDRAW or CS_HREDRAW;
wc.hInstance := hInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, IDC_ARROW);
wc.hbrBackground := (COLOR_WINDOW + 1);
wc.lpszMenuName := nil;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
RegisterClass(wc);
hWindow := CreateWindowEx(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE,
"POGiPlayer",
"POGiPlayer - Test Mode",
WS_VISIBLE or WS_CLIPSIBLINGS or
WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
400, 300,
0,
0,
hInstance,
nil);
ShowWindow(hWindow, CmdShow);
UpDateWindow(hWindow);
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Halt(Msg.wParam);
end;
← →
CodeMaster © (2009-02-09 11:40) [8]Anatoly Podgoretsky © (09.02.09 11:40) [6]
Хм тогда вопрос как AIMP это реализовал?
← →
Anatoly Podgoretsky © (2009-02-09 11:41) [9]> Rouse_ (09.02.2009 11:25:03) [3]
В КОL же не используются компоненты!
← →
Anatoly Podgoretsky © (2009-02-09 11:41) [10]
> CodeMaster © (09.02.09 11:40) [7]
Здесь нет вообще формы, в том числе и главной.
← →
Anatoly Podgoretsky © (2009-02-09 11:43) [11]
> AIMP
Я не знаю кто это такой и что он реализовал, но Билл клялся, что он не будет поддерживать компоненты Дельфи и я ему, до тех пор пока он не купит Дельфи, верю.
← →
CodeMaster © (2009-02-09 11:43) [12]Если не трудно дайте ссылочку на KOL , гугл мне какую-то фигню выдаёт
← →
Сергей М. © (2009-02-09 11:45) [13]
> CodeMaster © (09.02.09 11:43) [12]
Чем тебе VCL так насолила ?
← →
CodeMaster © (2009-02-09 11:48) [14]Слишком большой размер файла получается.
← →
Юрий Зотов © (2009-02-09 12:11) [15]> CodeMaster © (09.02.09 11:48) [14]
> Слишком большой размер файла получается.
Это - неизбежная плата за удобство и скорость разработки.
Если размер файла для Вас - главный критерий, то и пишите все на API. Но тогда либо придется забыть про все компоненты, либо написать что-то вроде собственной VCL (или использовать чью-то аналогичную разработку). А "и рыбку съесть, и ног не намочить" - так не бывает.
За все приходится платить. За малый размер файла - ручной работой, а за использование компонентов - размером файла.
← →
clickmaker © (2009-02-09 12:15) [16]> [14] CodeMaster © (09.02.09 11:48)
"копмонент на АПИ" - это CreateWindow и есть. Регистрируешь свой класс, пишешь оконную функцию, где обработка всех нужных сообщений - и всё, компонент готов )
← →
Anatoly Podgoretsky © (2009-02-09 12:16) [17]> CodeMaster (09.02.2009 11:48:14) [14]
У тебя проблемы с винчестером? Так купи новый, благо они очень дешевы, я неделю назад прикупид 1.5 терабайта по цене 160 гб пару лет назад. За неделю кончилось место, думаю подождать 2 тб или купить еще 1.5 тб
← →
{RASkov} © (2009-02-09 12:34) [18]> неделю назад прикупид 1.5 терабайта по цене 160 гб пару
> лет назад. За неделю кончилось место, думаю подождать 2
> тб или купить еще 1.5 тб
Это не есть хорошо :(
Лучше уметь хранить все на более меньших размерах... ибо свалку устроить проще простого.... главное только место под нее расчищать успевать....
Но я это сказал не в плюс к автору.... сам не понимаю, зачем ради нескольких килобайт(ну пусть даже нескольких тыщ) страдать такой фигней с АПИ.
Считаю, что АПИ нужен совсем для другого, нежели "чисто на нем писать" программы :)
← →
Anatoly Podgoretsky © (2009-02-09 13:25) [19]> {RASkov} (09.02.2009 12:34:18) [18]
Ты предлагаешь мне пережимать Full HD файлы в AVI по 700 мб? Нафиг я лучше пару новых дисков куплю, чем буду такое изуверство делать.
← →
CodeMaster © (2009-02-09 15:08) [20]Слышал такое что если писать на WinApi скорость программы увеличивается в несколько раз, но после прочтения ваших записей я понял что от-того что я напишу на WinApi ничего не изменится, скорость будет зависить оттого как программист напишет программу.
Задам последний вопрос, а если в модулях Controls,ExtCtrls и.т.д. урезать некоторые функции которые мне вообще не нужны, то размер ведь должен уменьшиться?
← →
clickmaker © (2009-02-09 15:10) [21]> Слышал такое что если писать на WinApi скорость программы
> увеличивается в несколько раз
скорость разработки уменьшается - вот это точно )
← →
CodeMaster © (2009-02-09 15:15) [22]:) Это точно
← →
Юрий Зотов © (2009-02-09 15:18) [23]> CodeMaster © (09.02.09 15:08) [20]
> если в модулях Controls,ExtCtrls и.т.д. урезать некоторые функции которые
> мне вообще не нужны, то размер ведь должен уменьшиться?
При обычной сборке (без Run-Time пакетов) линковщик Delphi САМ выбросит все неиспользуемые в программе функции.
← →
Anatoly Podgoretsky © (2009-02-09 15:24) [24]> CodeMaster (09.02.2009 15:08:20) [20]
Ты наверно слышал и такое, что если писать на Ассемблере, то скорость программы увеличивается в несколько раз, так вот это тебе лапшу на уши вешают. Это зависит не от инструмента, а в первую очередь от мозгов.
Если ты не боишься, то урезай.
← →
StriderMan (2009-02-10 16:34) [25]Пишите на .NET! Экзешник будет меньше раз в сто! В прямом смысле в 100 раз.
← →
KSergey © (2009-02-10 16:45) [26]> StriderMan (10.02.09 16:34) [25]
А еще в дельфи в Project Options на вкладке Packages есть волшебная опция "Build with runtime packages".
Автор (топика), установите ее для проекта с VCL - и восхититесь малым размером екзешника.
Про эту опцию знают только мастера, Борладн специально про нее не рассказывает, а вообще меня сейчас за раскрытие этой информа
← →
CodeMaster © (2009-02-10 19:51) [27]Знаю я про эту опцию, уже пробовал её - после установки этого флажка на других компьютерах программа не запускается.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.053 c