Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi

Автор: Adamich
Дата сообщения: 26.04.2005 18:49
как работать с sendmessage
в частности с WM_KEYDOWN = $0100; WM_KEYUP = $0101; WM_CHAR = $0102;

Автор: OdesitVadim
Дата сообщения: 26.04.2005 19:16
Sendmessage(<хендл окошка>,<сообщение, например WM_KEYDOWN>, <два параметра>);
Параметры обычно определяются по хелпу.
Где взять хендл? Почти в всех компонентов есть свойство Handle - это оно и есть. если в компонента его нет (например у Label), то тогда Sendmessage пользоваться нельзя.
Как вариант можно использовать метод Perform. У него три параметра, это параметры Sendmessage за искл. первого.
Автор: Adamich
Дата сообщения: 27.04.2005 09:13
не это понятно. вот где взять коды символов для sendmessage.
а то я не смог вслепую разобраться.
или хотя бы подскажите один-два символа.
а насчет хендла я знаю.
второе каков порядок действия, а то что-то реакции на указанные комманды не вижу.
третье если указывать хендл окна, не компоненты работать будет?
Автор: OdesitVadim
Дата сообщения: 27.04.2005 10:36

Цитата:
коды символов

SendMessage(edit1.Handle,WM_CHAR,ord('0'),0)
Функция ORD.

Цитата:
второе каков порядок действия, а то что-то реакции на указанные комманды не вижу.

Поставь на форму Edit1 и Buuton и впиши кнопке приведённый код. Понажимай...
Порядок действий? Логический. Тоесть нажал - отпустил.

Цитата:
третье если указывать хендл окна, не компоненты работать будет?

не понял что такое не компоненты
В понятии Винды кнопка тоже окно.
Автор: ViktorSila
Дата сообщения: 30.04.2005 10:49
Народ как к сознанной компоненте добавить события?
Автор: Smog
Дата сообщения: 30.04.2005 11:34
ViktorSila
с помощью Инспектора объектов, вкладки Events, путем двойного клика на нужном событии
Автор: Ke
Дата сообщения: 01.05.2005 03:07
ViktorSila

Цитата:
Народ как к сознанной компоненте добавить события?

Насколько знаю именно к компонентам их можно только руками вписывать, а мышью не получится.
Автор: mr_eoi
Дата сообщения: 01.05.2005 03:24
Ke
04:07 01-05-2005
Цитата:
Насколько знаю именно к компонентам их можно только руками вписывать, а мышью не получится.

Практика - критерий истины. Попробуй - будешь приятно удивлён.
Автор: evle
Дата сообщения: 01.05.2005 11:18
Smog
mr_eoi
Согласен с Ke. Речь? я так понял, шла не об обработке событий, а об их создании для нового компонента. Тут мышью не обойдешься. События - это свойства типа TNotifyEvent. Подробности проще всего понять, почитав исходники VCL.
Автор: mr_eoi
Дата сообщения: 01.05.2005 12:22
evle
12:18 01-05-2005
Цитата:
Речь? я так понял, шла не об обработке событий, а об их создании для нового компонента. Тут мышью не обойдешься. События - это свойства типа TNotifyEvent. Подробности проще всего понять, почитав исходники VCL.

Убедил. Только TNotifyEvent - это частный случай обработчика событий. Возьми, к примеру, TKeyEvent или TMouseEvent. Основным отличительным свойством обработчиков событий является Sender - источник возникновения события.
Автор: evle
Дата сообщения: 01.05.2005 13:08
mr_eoi
18:22 01-05-2005
Цитата:
Только TNotifyEvent - это частный случай обработчика событий.

Да, не совсем правильно выразился.

Цитата:
Основным отличительным свойством обработчиков событий является Sender - источник возникновения события.

Не совсем. Главное, что они определяются как

Код: ... = procedure(...) of object;
Автор: mr_eoi
Дата сообщения: 01.05.2005 13:49
evle
14:08 01-05-2005
Цитата:
Не совсем. Главное, что они определяются как

Код:... = procedure(...) of object;

И им передается неявный параметр - объект, у которого произошло событие.

Так слово Sender было использовано в качестве нарицательного. Ну в общем и целом пришли к какому-то консенсусу.
Автор: evle
Дата сообщения: 01.05.2005 14:04
mr_eoi
Sender - это не совсем то. Он как раз передается явно и в общем случае не обязателен. Обычно он показывает, какой объект вызывает событие в нашем, но ничто не мешает поставить туда еще что-нибудь.
Неявный параметр - это всегда ссылка на себя, а не на другой объект.
Вот теперь, надеюсь, консенсус.
Автор: mr_eoi
Дата сообщения: 01.05.2005 14:11
evle
Хотелось бы ещё добавить, что реальные обработчики событий всё-таки есть методы, проверяющие валидность указателей на пользовательские (сменные) обработчики (м.б. оформленные как property) и при положительном результате проверки, вызывающие их как стандартные методы, например:
Код: TOpenDialog=class(...)
...
FOnFolderChange: TNotifyEvent;
...
property OnFolderChange: TNotifyEvent read FOnFolderChange write FOnFolderChange;
...
end; // TOpenDialog

procedure TOpenDialog.DoFolderChange;
begin
if Assigned(FOnFolderChange) then FOnFolderChange(Self);
end;
Автор: evle
Дата сообщения: 01.05.2005 14:36
mr_eoi
Конечно. Но так можно далеко уйти, т. к. этот вопрос не на одну страницу, лучше все-таки почитать исходники VCL и мануалы, а здесь обсуждать только конкретные вопросы.
Автор: devingel
Дата сообщения: 02.05.2005 19:36
Почему в Delphi 2005/Delphi 8 не обновляет ресурсы при компиляции? Т.е., например, в Design-окне на тулбарах имиджи - нормальные, а в запущенном виде - нет...
Автор: ViktorSila
Дата сообщения: 02.05.2005 21:27
В программе есть массив строк(типа простой таблици). Нужно создать свой компонент потомок от DataSet. И дабавить в него пару своих событий(переход на следующее поле таблицы, и т.п.). А уже программы с помощью созданной компоненты, перемещается по этому массиву строк. Компонент создал, а вот как создать свои события, и на что они должны реагировать, не могу сообразить как это сделать.
Автор: evle
Дата сообщения: 03.05.2005 05:07
ViktorSila
03:27 03-05-2005
Цитата:
И дабавить в него пару своих событий(переход на следующее поле таблицы, и т.п.).

А какая разница потомку от DataSet, кто ходит по полям? Он, вроде, должен только на изменения реагировать.
По сути:
Объявляешь тип TXXXEvent = procedure(Sender: TObject, Position: .... .... ....) of object;
(Параметры определяешь исходя из того, что хочешь наружу сообщить: на какое поле перешли, может еще что-нибудь. Sender пусть будет - пригодится).
Объявляешь свойство этого типа (public):
OnXXX: TXXXEvent;
и поле
FOnXXX: TXXXEvent; (private)
Объявляешь protected-процедуру DoOnXXX В ней пишешь:

Код: procedure TYYYDataSet.DoOnXXX;
begin
if Assigned(FOnXXX) then FOnXXX(Self);
end;
Автор: SergeyReutov
Дата сообщения: 03.05.2005 10:36
Какая функция удаляет все пробелы из строки (слева и справа)?
Автор: evle
Дата сообщения: 03.05.2005 11:01
SergeyReutov
Trim
Автор: GrayElf
Дата сообщения: 03.05.2005 11:01
SergeyReutov

function Trim(const S: string): string;
Автор: ViktorSila
Дата сообщения: 03.05.2005 12:24
Есть массив строк (Вася, Петя,..и т.п.) в программе. На форме есть Edit1 и куча кнопок. При нажатии на Button1(переход на первую запись и она выводится в Edit1), ......Button5(добавить запись из Edit1).и т.п.. При нажатии на определнную кнопку должно сработать определенное созданное "ручками" событие в созданной компоненте(потомок DataSet) и выполнить необходимые действия.
[q][/q]TXXXEvent = procedure(Sender: TObject, Position: .... .... ....) of object;
Что писать конкретно в Position.
Автор: evle
Дата сообщения: 03.05.2005 14:07
ViktorSila
DataSet - невизуальный элемент, таковыми должны быть и его потомки. Он просто предоставляет набор методов (что-то вроде интерфейса) для универсальной работы с данными визуальных элементов (типа DBGrid, DBEdit). Тем более событие в твоем случае возникает в кнопке (ее ведь нажали); Обработчик события кнопки должен будет вызвать метод Какого-либо визуального элемента, а он уже спросит нужное значение у твоего потомка DataSet. Так что ты немного не в ту сторону ушел.
Position я там написал для примера, там может стоять любой набор параметров.
Автор: ViktorSila
Дата сообщения: 03.05.2005 22:06
В DataSet есть такой метод как First? И как в созданном потомке DataSet поменять действия этого метода чтобы он обращался к моему массиву строк...
Автор: Felix
Дата сообщения: 03.05.2005 22:26
ViktorSila
опиши его как procedure ....; override;
а в обработчике опиши своё действие без наследования.
Автор: evle
Дата сообщения: 04.05.2005 03:58
Felix
ViktorSila
Если я правильно понл код метода First, переопределять лучше InternalFirst (все равно придется - он виртуальный.) А если переопределить First, то получится не очень хорошо.
Автор: Felix
Дата сообщения: 04.05.2005 19:04
evle
Вобщем-то можно и так, смотря, что конкретно ты хочшь сделать.
Автор: evle
Дата сообщения: 05.05.2005 03:43
Felix
Просто если не вызывать предка, то отвалится пара событий и свойство BOF, да и все равно придется делать InternalFirst, иначе не скомпилится.
Автор: SergeyReutov
Дата сообщения: 05.05.2005 09:25
С помощью какой функции можно получить дробную часть числа после запятой? Тип числа Real.
Автор: OdesitVadim
Дата сообщения: 05.05.2005 09:37
Frac

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.