Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 271
от 21.10.2005, 16:15

Администратор:Калашников О.А.
В рассылке:Подписчиков: 258, Экспертов: 47
В номере:Вопросов: 5, Ответов: 13


Вопрос № 27744: Здравствуйте уважаемые эксперты! Проблема такая. Мне нужно что бы внутири моей программы по щелчку на button1 переменная i увеличиволась на единицу и при этом сохраняла свой результат. Заранее спасибки! ...
Вопрос № 27753: Здравствуйте уважаемые эксперты! Задаю ламерский вопрос. Как запустить Dos приложение из программы, чтобы окно этого приложения не закрывалось после завершения работы программы, т.е как по нажатию Shift+Enter например в Total Commander...
Вопрос № 27759: Дорого времени суток!!! Помогите реализовать алгоритм задачи, а то у меня не выходит. Условие задачи: Дана доска n-мерной длины (длину задает пользователь) в которую забиты 12 гвоздей на одинаковом расстоянии друг от друга. Так же да...
Вопрос № 27777: Всем привет! Пред. вопрос: 27692 (хотя он практически не имеет отношения к этому). Как сделать, чтобы при наведении курсора на TImage картинка бы как-нибудь красиво подсвечивалась? Может быть, есть другие компоненты для таких целей? Заран...
Вопрос № 27778: Всем привет! Нужно сделать так, чтобы программе передавались нажатия клавиш, а конкретно - набираемый текст. То есть пользователь набирает какой-либо текст в любом приложении и этот текст передаётся программе. Как сделать? Не ставишь же хуки на в...

Вопрос № 27.744
Здравствуйте уважаемые эксперты!

Проблема такая. Мне нужно что бы внутири моей программы по щелчку на button1 переменная i увеличиволась на единицу и при этом сохраняла свой результат. Заранее спасибки!
Отправлен: 15.10.2005, 17:44
Вопрос задал: NIKOLLAY (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: DAiMor
Здравствуйте, NIKOLLAY!
тогда обьявляй переменную не в вызываемой процедуре а в самом моделе тогда эта переменная станет глобальной для этого модуля
смотри приложение

Приложение:

Ответ отправил: DAiMor (статус: 1-ый класс)
Отправлен: 15.10.2005, 17:49
Оценка за ответ: 5
Комментарий оценки:
спасибо!

Отвечает: Denisss
Здравствуйте, NIKOLLAY!
Куда "сохраняла" результат?

Для увеличения переменной i на единицу используйте процедуру inc(i);

Если Вы используете эту переменную только в форме, опишите ее в разделе Private класса формы
TForm1 = class(TForm)
...
private
i: Integer;
...
end;


Если Вы хотите, чтобы переменная была доступна из всех модулей, то определите ее как глобальную переменную:
var
Form1: TForm1;
i: Integer;
...


Но не определяйте ее в обоих местах - это может привести к ошибкам
Ответ отправил: Denisss (статус: Практикант)
Отправлен: 15.10.2005, 18:06
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, NIKOLLAY!
Сделайте глобальную переменную и работайте с ней. Пример см в приложении.

Приложение:

Ответ отправил: sir henry (статус: Профессор)
Отправлен: 15.10.2005, 18:45
Оценка за ответ: 5

Отвечает: Yадозuпп
Здравствуйте, NIKOLLAY!
В дополнение ко всем ответам - можно не заводить новую переменную, а просто использовать TButton1.Tag. Это свойство позволяет хранить любые числовые значения, да и связь с TButton1 более чем очвидна - не ошибешься, как с глобальной переменной. Только увеличивать значение придется не инкрементом, а через TButton1.Tag := TButton1.Tag + 1
---------
Жизнь прожить - это вам не в тапки гадить
Ответ отправил: Yадозuпп (статус: 5-ый класс)
Отправлен: 15.10.2005, 19:06
Оценка за ответ: 5
Комментарий оценки:
Супер

Отвечает: Schmak
Здравствуйте, NIKOLLAY!
У каждого компонента есть незадествованная переменная Tag целого типа, её можно использовать в своих целях. Установите 0 в свойстве Tag кнопки Button1, а дав обработчике нажатия напишите:

procedure TForm1.Button1Click(Sender: TObject);
begin
button1.tag:=button1.tag+1;
end;

Тепрерь при нажатии на кнопку Tag будет увеличиваться на 1, при этом его значение будет доступно и из других процедур
Ответ отправил: Schmak (статус: 2-ой класс)
Отправлен: 15.10.2005, 21:18

Отвечает: Romodos
Здравствуйте, NIKOLLAY!
Надо объявить глобальную переменную( там же где Form:Tform1}
var i:integer;

и писать inc(i) в событии Button1Click;
---------
FAQ me off!
Ответ отправил: Romodos (статус: Студент)
Отправлен: 16.10.2005, 09:14
Оценка за ответ: 5
Комментарий оценки:
точно!

Отвечает: Ерёмин Андрей
Здравствуйте, NIKOLLAY!
Хм. Я немного не понял второй части вопроса - что значит "сохраняла свой результат" ? Пишем: Inc(i);. Переменная i увеличивается на единицу. Куда её сохранить-то нужно? В памяти она и сохраняется.
---------
Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 16.10.2005, 10:12


Вопрос № 27.753
Здравствуйте уважаемые эксперты!
Задаю ламерский вопрос. Как запустить Dos приложение из программы, чтобы окно этого приложения не закрывалось после завершения работы программы, т.е как по нажатию Shift+Enter например в Total Commander
Отправлен: 15.10.2005, 21:18
Вопрос задал: Schmak (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Bob Johnson
Здравствуйте, Schmak!
если ты точно знаешь, что будешь запускать консольное приложение, то можно написать свою консольную программку, которая будет запускать нужную, а потом ждать нажатия на клавишу.
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 16.10.2005, 01:16

Отвечает: sir henry
Здравствуйте, Schmak!
Используйте для этого вызов командного интерпретатора (cmd.exe /k), где в качестве дополнительного параметра будет имя Вашей ДОС-программы:
ShellExecute(0,'open','cmd.exe','/k arj.exe',NIL,SW_SHOW);
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 16.10.2005, 08:23


Вопрос № 27.759
Дорого времени суток!!!

Помогите реализовать алгоритм задачи, а то у меня не выходит.
Условие задачи:
Дана доска n-мерной длины (длину задает пользователь) в которую забиты 12 гвоздей на одинаковом расстоянии друг от друга. Так же дана веревка m-мерной длины (длина задается пользователем). Нужно вычислить сколько раз веревка обогнет каждый из гвоздей и сколько раз она сделает полный оборот всей доски. Второе это надо найти на каком расстоянии забиты гвозиди.

Зарание огромное спасибо всем кто сможет мне помочь.

С Уважением ко всем экспертам,
Ujin Antikvar!!!
Отправлен: 15.10.2005, 23:41
Вопрос задал: Ujin Antikvar (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Ujin Antikvar!
Если под словом "доска" имелась в виду "плоскость", то она всегда двумерна (два измерения - длина-ширина). Осмелюсь предположить, что под "n-мерной длиной" подразумевалась длина доски, задаваемая пользователем. Тоже самое можно сказать и о веревке. :)
Если же под словом "доска" предполагается его реальный (3-х мерный, пространственный) вариант, то задача не имеет решения, т.к. неизвестна толщина доски, а в условии не сказано, что гвозди забиты на одной плоскости. :)
1) Сколько раз веревка обогнет каждый гвоздь? Все зависит от того, какое расстояние между гвоздями и толщина веревки. Если расстояние достаточное (или, что тоже самое, толщина веревки достаточно мала) то веревка обогнет всего один гвоздь (т.к. можно его огибать пока не кончится веревка или расстояние между гвоздями не хватит, тогда придеться переходить на следующий гвоздь), а результат (сколько раз) будет зависить от диаметра гвоздя и, опять же, от толщины веревки. :)
2) Сколько раз она сделает полный оборот всей доски?
Каким образом? По периметру? По толщине? Толщину мы не знаем. По периметру тоже не сможем вычислить, т.к. известна только длина доски, а вторая величина (ширина) неизвестна.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 16.10.2005, 08:43

Отвечает: Romodos
Здравствуйте, Ujin Antikvar!
kolvo_polnyh_oborotov:=trunc(m/(2*l));
rasst_mezhdu_gvozdyami:=l/11;
А вопрос о том, сколько раз она обогнёт каждый из гвоздей немного непонятен
Надо выводить информацию по каждому гвоздю или что?
Если так, то
kolvo[i]:=kolvo_polnyx_oborotov*2
ost:=m-2*l*kolvo_polnyh_oborotov;
if ost>rasst_mezhdu_gvozdyami*(i-1) then
kolov[i]:=kolvo[i]+1;
if ost>l+rasst_mezhdu_gvozdyami*(12-i+1) then
kolvo[i]:=kolvo[i]+1;

Вот такая идея
---------
FAQ me off!
Ответ отправил: Romodos (статус: Студент)
Отправлен: 16.10.2005, 09:14
Оценка за ответ: 5


Вопрос № 27.777
Всем привет!
Пред. вопрос: 27692 (хотя он практически не имеет отношения к этому).
Как сделать, чтобы при наведении курсора на TImage картинка бы как-нибудь красиво подсвечивалась? Может быть, есть другие компоненты для таких целей?
Заранее благодарю за ответы.
Отправлен: 16.10.2005, 12:05
Вопрос задал: Ерёмин Андрей (статус: Специалист)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Татьяна
Здравствуйте, Ерёмин Андрей!
Почему бы просто не рисовать какую-нибудь рамочку, либо (что мне кажется достаточно приемлемо) не менять саму картинку, на другую, более осветленную, пользователь даже не заметит подмены :)
---------
Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 5-ый класс)
Отправлен: 17.10.2005, 12:53
Оценка за ответ: 5
Комментарий оценки:
О! Отличная идея! Спасибо!


Вопрос № 27.778
Всем привет!
Нужно сделать так, чтобы программе передавались нажатия клавиш, а конкретно - набираемый текст. То есть пользователь набирает какой-либо текст в любом приложении и этот текст передаётся программе. Как сделать? Не ставишь же хуки на все буквы...
Заранее благодарен за ответы.

Приложение:

Отправлен: 16.10.2005, 12:14
Вопрос задал: Ерёмин Андрей (статус: Специалист)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Jadd
Здравствуйте, Ерёмин Андрей!
А хотя бы и кейлоггер, кому какое дело? Хук ставится на события с клавиатуры. Ловишь WM_KEYDOWN и спишь спокойно.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 16.10.2005, 15:28
Оценка за ответ: 3
Комментарий оценки:
Ну а как делать-то? Как ставить хук? Как ловить события?


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Rambler's Top100 Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное