Вопрос № 155420: Здравствуйте!!! Посмотрите пожалуйста, что в этом коде не так: <div style="margin:15px; margin-top:10px"><div><b><font color="gray">Код:</font></b></div><pre style="margin: 0px; padding: 6px; border: 1px inset; width: 650px; height: 100px;...
Вопрос № 155447: Здравствуйте! Хочу понять следующий момент. Из процедуры, назовем ее f1, вызывается подпрограмма f2. Из f2, в зависимости
от условия вызывается либо f3, либо f4. Но это условие (предположим, оно громоздкое) определяется в f1. Как м...Вопрос № 155541: Здраствуйте. Подскажите примером или советом. Как можно узнать что запущено новое приложение или закрылось старое, список приложений хранится в ListBox'е. варианты с постояными проверками неподходят, думаю можно поставить хук, но незнаю какой...
Вопрос № 155.420
Здравствуйте!!! Посмотрите пожалуйста, что в этом коде не так:
type Tfrm = class(TForm) Edit1: TEdit; Label1:
TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var frm: Tfrm;
implementation
{$R *.dfm}
procedure Tfrm.Button1Click(Sender: TObject); var res : real; i : integer; begin
try res := StrToFloat(Edit1.Text); i := round(res);
Label1.Caption := IntToStr(i);
except Label1.Caption := 'Ошибка';
end; end;
end.
Это программа для округления действительного числа в целое с помощью механизма обработки исключительных ситуаций. Код компилируется, но в результате выполнение - ошибка.
Отвечает: Andersen
Здравствуйте, Николай // Programmator ! Данный код работает нормально, проверял! Все дело в том что если запускать из компилятора он действительно приостанавливает работу программы и выдает код ошибки. после этого можно продолжить выполнение программы. А если запускать сформированный exe файл то эта ошибка не выдается
Ответ отправил: Andersen (статус: 6-й класс)
Ответ отправлен: 23.12.2008, 09:59
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 239392 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: А... Понял, Спасибо за помощь!!!
Вопрос № 155.447
Здравствуйте! Хочу понять следующий момент. Из процедуры, назовем ее f1, вызывается подпрограмма f2. Из f2, в зависимости от условия вызывается либо f3, либо f4. Но это условие (предположим, оно громоздкое) определяется в f1.
Как можно в процедуру f2 (из f1) передать адрес на f3 или f4, и затем выполнить ту или другую.
Конечно, для начинающих напрашивается простое решение с передачей некоторой булевской переменной, и в зависимости от нее происходит вызов либо f3, либо f4. Хотелось
бы научиться программировать более профессионально с передачей адресов. Собственно, я предполагаю, как получить адрес через @. Но никак не соображу, как потом вызвать процедуру по адресу, ведь обычно чтобы вызвать - пишем ее имя.
Если у вас процедуры с одинаковым списком параметров (а так оно обычно и бывает), то описываете процедурный тип, например, TMyProc = procedure(A : Integer); а свою f2 как procedure f2(MyProc : TMyProc). В f1 вызывавем f2(f3) либо f2(f4). А внутри f2 - используем просто в лоб MyProc(a).
P.S. После прочтения вашей дискуссии в минифоруме полагаю это именно то, что вы спрашивали. В плюсах такого подхода (по сравнению с передачей просто указателей - хотя могу
и такой "непрофессиональный" или "суперпрофессиональный" вариант описать - иногда приходится делать) еще и то, что компилятор проверит типы процедур на соответствие - что оградит от "глупых" ошибок.
Ответ отправил: PavelGM (статус: Практикант)
Ответ отправлен: 23.12.2008, 10:57
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 239400 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Спасибо большое, в данном случае это именно то, что мне нужно!
Вопрос № 155.541
Здраствуйте. Подскажите примером или советом. Как можно узнать что запущено новое приложение или закрылось старое, список приложений хранится в ListBox'е. варианты с постояными проверками неподходят, думаю можно поставить хук, но незнаю какой и как. Буду благодарен за любой ответ.
Отправлен: 23.12.2008, 22:05
Вопрос задал: Dimon007 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: DORMICE
Здравствуйте, Dimon007!
Можно попробовать поставить хук на создание окон в системе: WH_CBT (событие HCBT_CREATEWND).
Пример хук-процедуры привожу в приложении... Ставить также как и любой другой хук:
//А так снимаем: UnhookWindowsHookEx(HookHandle); ...
Чтобы хук отрабатывал глобально, его требуется оформить в виде DLL.
по данному вопросу в сети куча материалов (те же клавиатурные шпионы).
Приложение:
Ответ отправил: DORMICE (статус: 1-й класс)
Ответ отправлен: 24.12.2008, 09:56
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 239496 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: спасибо. но если у программы нет окна или она запускатся скрыто, то её поймать не получиться. я пишу что то вроде Диспетчера задач виндовского, и для этого приходится постояно знать что запущено.....
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.