Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

Свои компоненты   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
1-1207857224
тКнопка
2008-04-10 23:53
2009.03.29
Как узнать, сколько копий приложения запущенно?


2-1233266659
Тимоха
2009-01-30 01:04
2009.03.29
непонятки со string


2-1233776721
trsteep
2009-02-04 22:45
2009.03.29
XML vs TreeView


2-1233905029
stas
2009-02-06 10:23
2009.03.29
TWebBrowser


15-1233240162
@!!ex
2009-01-29 17:42
2009.03.29
Самый лучший фильм 2