Вверх ↑
Этот топик читают: Гость
Ответов: 109
Рейтинг: 4
#106: 2009-09-02 16:45:58 ЛС | профиль | цитата
Tad писал(а):
Судя по тому, что ты наваял, очень долго рассказывать "как нада".
готово смотри что там не правельно)) 2 схема в том сообщение
карма: 0

0
Ответов: 16876
Рейтинг: 1235
#107: 2009-09-02 16:52:44 ЛС | профиль | цитата
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMan, ICQClient, ICQWorks, StdCtrls, Buttons, ExtCtrls;
как только эти все USES будут в наличии в HiAsm - так и заработает
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 109
Рейтинг: 4
#108: 2009-09-02 16:56:16 ЛС | профиль | цитата
а что туда нужно писать что бы было норм если не секрет
Я новичок и не разу схемы не переделывал такие большие и сложные
А так охото что то сделать )
карма: 0

0
Разработчик
Ответов: 25651
Рейтинг: 2085
#109: 2009-09-02 17:34:35 ЛС | профиль | цитата
Иван Балван писал(а):
А так охото что то сделать

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

Новичку категорически не рекомендуется браться за такие вещи. Так что, сначала -- учиться, учиться и учиться, так завещал... ну сами знаете кто.

карма: 19

0
Администрация
Ответов: 15278
Рейтинг: 1514
#110: 2009-09-02 18:02:56 ЛС | профиль | цитата
Tad писал(а):
Судя по тому, что ты наваял, очень долго рассказывать "как нада".

для этого вывода одного ника достаточно...
карма: 26
0
Ответов: 109
Рейтинг: 4
#111: 2009-09-03 16:13:27 ЛС | профиль | цитата
Дайте 2 схемы не переведенную и переведенную на хиасм
Для ТОГО ЧТО БЫ ПОНЯТЬ ЧТО К ЧЕМУ
карма: 0

0
Разработчик
Ответов: 4671
Рейтинг: 420
#112: 2009-10-06 17:02:00 ЛС | профиль | цитата
Возможно не в ту тему:
Я почитал статейки из википедии по созданию DLL ручками, собрал парочку с помощью нашего любимого HiAsm(программа запуска для компилятора), прикрутил к своим прогам с помощью IC(одним словом попрактиковался), все работает! НО, в HiAsmDLL возможно вызывать события(например DLL := таймер.onTimer->DLL.onTmr, а в программе какие-то действия происходят), чтение исходников компонентов не помогло, если не трудно можно описать какие функции отвечают за это, описать процесс(кратко хотя бы) + ко всему маленький пример программы с IC(для управления библиотекой)
карма: 10
0
Администрация
Ответов: 15278
Рейтинг: 1514
#113: 2009-10-06 17:12:07 ЛС | профиль | цитата
для этого нужно в DLL передавать указатель на метод класса из IC и далее уже использовать его в теле библиотеки.
карма: 26
0
Разработчик
Ответов: 4671
Рейтинг: 420
#114: 2009-11-09 10:30:00 ЛС | профиль | цитата
А вот я что-то не понял, почему IC запускается, а с отладкой нет Такая же проблема и с компонентами, сделанными с помощью средств HiAsm
code_15594.txt
------------ Дoбавленo в 10.33:
Гы, разобрался, вместо обычной процедуры _doEvent(<procedure>,<index>), нужно _doEvent(<procedure>,<index>,<похоже индификатор связи в схеме, для ее "утолщения">). И как тогда осуществлять отладку схем с компонентами, сделанными с помощью HiAsm
карма: 10
0
файлы: 1code_15594.txt [1.5KB] [167]
Ответов: 4612
Рейтинг: 504
#115: 2009-11-11 14:22:15 ЛС | профиль | цитата
Вопросик есть (если можно). Есть допустим некая API функция, как допустим результат из неё вывести на точку события
карма: 6

0
Разработчик
Ответов: 25651
Рейтинг: 2085
#116: 2009-11-11 14:37:41 ЛС | профиль | цитата
andrestudio писал(а):
Есть допустим некая API функция, как допустим результат из неё вывести на точку события

Создаешь точку события тип THI_Event и отдаешь ей результат своей функции, например --

  _hi_OnEvent(<имя точки>, <переменная с результатом функции, приведенная к одному из наших типов>);
карма: 19

0
Ответов: 4612
Рейтинг: 504
#117: 2009-11-11 15:40:20 ЛС | профиль | цитата
nesco, в принципе так и делаю, но получаю такое
C:\Program Files\HiAsm v4 build 175\Elements\delphi\code\hiInlineCode_8BEB294.pas(63) Error: Undeclared identifier: 'onPath'
C:\Program Files\HiAsm v4 build 175\Elements\delphi\code\hiInlineCode_8BEB294.pas(63) Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments


из этого кода

#pas

type

THiAsmClass = class(TDebug)
private

public
...
...
...
onPath:THI_Event;
end;

implementation

...

function ChildCallback(HWnd: THandle; Msg: Cardinal;
WParam, LParam: Integer): Cardinal; Stdcall;
var path: PChar;
begin
case Msg of
// Одиночный клик левой кн. мыши
WM_LBUTTONDOWN:
begin
MessageBeep(0);
end;

// Двойной клик левой кн. мыши
WM_LBUTTONDBLCLK:
begin
path := PathExplorerTree();
_hi_onEvent(onPath, path);
end;
WM_KEYDOWN:
begin
//--
end;
end;

// Не забываем вызвать оригинальную оконную процедуру
Result := CallWindowProc(Pointer(GetWindowLong(HWnd, GWL_USERDATA)),
Hwnd, Msg, WParam, LParam);
end;

карма: 6

0
Ответов: 4291
Рейтинг: 666
#118: 2009-11-11 15:48:55 ЛС | профиль | цитата
Иван Балван писал(а):
а что туда нужно писать что бы было норм если не секрет
Я новичок и не разу схемы не переделывал такие большие и сложные
А так охото что то сделать


Попробую помочь. Расскажу, как бы делал я. Рекомендации касаються пока только невизуального компонента, и, конечно, не являются пошаговой инструкцией, а просто общими соображениями. Ну и, как рекомендовал nesco, вначале нужно потренироваться на небольших схемах.
Я так понял, ты хочешь сделать компонент для работы с ICQ.
Смотрим на блок uses:


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMan, ICQClient, ICQWorks, StdCtrls, Buttons, ExtCtrls;

Сразу должен обратить внимание, какие используются стандартные модули, а какие - нестандартные (ICQClient, ICQWorks). Переделывать стандартные модули, чтобы они работали в HiAsm - занятие абсолютно безполезное (придется переделать всю VCL - а это даже представить страшно), да и это в большинстве случаев не нужно. Думаю, в данном случае тебе нужно разобраться в работе компонента TICQClient, который, подозреваю, и реализован в модулях ICQClient, ICQWorks.
Предполагается, что ты знаком з понятием "класс" и как с ним работать. Если нет - тогда сначала усвой работу с классами, а также принцыпы работы компонентов Delphi.

Открываешь модуль, в котором обьявлен TICQClient и разбираешся в его методах и свойствах: для чего они предназначаются, какой из них отвечает за визуальное отображение компонента на форме (эти пока лучше не трогать), а какой - за основную функциональность (прием, отправка сообщений и т. п.). Смотришь реализацию этих методов и отмечаешь какие в них стандартные функции используються (API, для работы со строками, числами, датой и т. п. - т.е. те, которые уже имеются в KOL или котрые можно найти в VCL и безболезненно портировать в HiAsm). Основная идея - чтобы отделить модули ICQClient, ICQWorks от модулей VCL, чтобы в uses остались только Windows, ICQClient, ICQWorks.
Затем пытаешься отделить невизуальную часть от визуальной. Например, я так понимаю, ICQClient должен иметь методы (точки) типа "doAutorize" "doSent" и событие "onMessage".
Для этого ему визуального ничего не нужно. При поступлении нового сообщения точка onMessage выдает его в поток, а ты уже можешь добавить его, например, в стандартный список. Поэтому визульные методы класса TICQClient нужно просмотреть на наличие каких-то функций, не относящихся к отображению компонента на форме, но имеющих значение для функционирования компонента.
Пытаешься избавится от стандартных модулей, прописанных в uses модулей ICQClient и ICQWorks.
Потом делаешь собственный класс, который содержит только функциональные методы (интерфейсные отбрасываешь). Конечно, новый класс ты уже не сможешь тестировать, просто бросив компонент на форму; создавать экземпляр нужно будет вручную (aaa:=TMyICQClient.Create(...);). Всё это, конечно, будет сопровождаться шишками на лбу в виде ошибок компиляции, перелопачивания вдоль и поперек модулей ICQClient и ICQWorks и т.п.
Созданный класс обьявляется в новом модуле, в uses которого прописываются только Windows, ICQClient, ICQWorks. Затем код из ICQClient, ICQWorks перносится в твой новый модуль.
В конце у тебя должен получится один модуль (например, ICQClient.pas) в котором обьявлен только один готовый класс (например, TMyICQClient) и требуемые API-функции, которые остались после избавления от стандартных модулей.
Если ты сможешь на этом этапе получить работающий класс, тогда портирование под HiAsm не будет сложным.
карма: 22

0
Разработчик
Ответов: 25651
Рейтинг: 2085
#119: 2009-11-11 16:11:41 ЛС | профиль | цитата
andrestudio, у тебя одна крупная ошибка -- ты пытаешься вызвать событие из функции ChildCallback, которая не является методом твоего класса. Для этого необходима передать указатель на твой класс в функцию обратного вызова, после чего активизировать переменную твоего класса и с помощью нее вызывать событие.


------------ Дoбавленo в 16.15:
Но из твоего куска совсем непонятно, как передать функции обратного вызова указатель на твой класс Можно было сделать глобальной переменной, но тут требуется наличие только одного экземпляра класса, если их будет несколько, то работать будет только последний инициализированный
карма: 19

1
Голосовали:andrestudio
Ответов: 4612
Рейтинг: 504
#120: 2009-11-11 16:20:43 ЛС | профиль | цитата
nesco писал(а):
Для этого необходима передать указатель на твой класс в функцию обратного вызова
типа вот так
var path: PChar;
onPath: THI_Event;[/quote] заработало но в рантайм вываливается, хотя тот же самый метод в точках работает

#pas
procedure THiAsmClass.doPathBrouse;
var path: PChar;
begin
path := PathExplorerTree();
_hi_onEvent(onPath, path);
end;
карма: 6

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)