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

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


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

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

Выпуск № 094
от 01.11.2002, 10:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 251
Отправлено ответов: 444
Активность: 176.8 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Jadd
Статус: Профессиональный
Общий рейтинг: 144.44
[Подробней >>]
Necro
Статус: Доверительный
Общий рейтинг: 111.26
[Подробней >>]
Sanya
Статус: Опытный
Общий рейтинг: 116.79
[Подробней >>]
 
Vladimir
Статус: Опытный
Общий рейтинг: 110.02
Телефон: (08242) 43599 40099 раб 41255 дом
[Подробней >>]
Idle Sign
Статус: Доверительный
Общий рейтинг: 148.48
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 247. Доброго времени суток, уважаемые Эксперты! Есть вопрос: Нужно написать программу (резидент), которая... (ответов: 1)
Вопрос № 248. Мне надо создать функцию, чтобы она в каждый Edit (их на форме 10) В свойство Text записала переменн... (ответов: 5)

Вопросов: 2, ответов: 6


 Вопрос № 247

Доброго времени суток, уважаемые Эксперты!
Есть вопрос:
Нужно написать программу (резидент), которая бы по нажатию определённой комбинации клавишь сбрасывала бы информацию (имя, параметры запуска, регистры, сегменты) об активном процессе в файл.(ОС - win98). Отсюда следует два вопроса:
1. Как сделать программу резидентной (по-моему требуется что-бы её не было видно в виде иконок либо чего-то другого, только чтобы висел в памяти её процесс)?
2. Как получить всю нужную информацию об активном процессе под окошки?



Вопрос отправлен: 28.10.2002, 11:16
Отправитель: Alexander (sashat@bigmir.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Jadd

Добрый день, Alexander!
Начнем с того, что определимся в терминологии:
1)Резидентов, в понятиях доса, в винде просто не существует. Есть программы, которые сидят в трее, есть проги, которых почти нигде не видно, есть системные службы (Win2000, Xp, NT). Что ты имел в виду?
2)Нажми Alt-Ctrl-Del и посмотри сколько активных процессов в винде. В ХР их еще больше. Какой тебе? Илил тебе нужен тот, который на таскбаре? Непонятно.
Так что, прежде чем писать сюда свои вопросы, разберись сначала с программированием под винды (именно архитектурой ОСи, способом адрессации и тп.) или сформулируй свою задачу конкретней.

Ответ отправлен: 28.10.2002, 13:57
Отправитель: Jadd


 Вопрос № 248

Мне надо создать функцию, чтобы она в каждый Edit (их на форме 10) В свойство Text записала переменнную i
var i:integer;
begin
for i:=1 to 10 do begin
edit[i].text:=i;
end;
end;
Тут естественно ничего не получилось. Поправьте, plzzz



Вопрос отправлен: 28.10.2002, 15:38
Отправитель: pcgamer

[Следующий вопрос >>] [Список вопросов]

Отвечает Jadd

Здравствуйте, pcgamer!
Правильно. edit - не массив объектов. Странно, что тебе вообще такая идея пришла в голову перебирать все объекты типа TEdit как обычный массив. Для реализации твоей задачи есть масса способов. Самы тривиальный и очевидный - перебрать все контролы твоей формы по имени (почти так как ты делал, но с большим НО...). Делается это так:
var ctrl: TControl;
str: String;
i: Integer;
edit: TEdit;
begin
{Предположим, что все TEdit у нас называются так, как ты предложил}
str := 'Edit';
{Переберем все контролы с именем Edit[i+1], где [i+1] - индекс контрола}
for i:=1 to ControlCount do
begin
{здесь получаем указатель на контрол}
ctrl := FindChildControl(str + IntToStr(i));
{Если контрол найден, присвоим его свойству Text некое значение}
if (ctrl <> 0)
begin
{Приведем контрол к типу TEdit}
edit = TEdit(ctrl);
{и впишем в контрол свое умное сообщение}
edit.Text = 'Found edit ' + IntToStr(i);
end;{if}
end; {for}
end;{proc}
Стоит заметить, что у этого подхода есть недостатки (и довольно очевидные), один из них - мы должны быть уверены, что контролы именно так и называются. В противном случае этот подход неприемлим и нужен другой. Но это - тема для твоих исследований(или ответов других экспертов)
Удачи
P.S. Я там мог кое-что упустить в плане синтаксиса, т.к. пишу исключительно на С++. Но, вроде, все верно.

Ответ отправлен: 28.10.2002, 18:17
Отправитель: Jadd


Отвечает Necro

Доброе время суток, pcgamer!
Доброе время суток, pcgamer!
1)
Попробуй так: edit[i].text:=inttostr(i);
2)Если твоии TEditы носят имена Edit1 - Edit10, то просто замени
edit[i].text:=i;
TEdit(FindComponent('Edit'+inttostr(i))).text := inttostr(i);
Я только что у себя проверил - работает. А вообще, как я уже говорил, лучше создавать Едиты по ходу работы.

Приложение:

Ответ отправлен: 28.10.2002, 19:35
Отправитель: Necro


Отвечает Sanya

Добрый день, pcgamer!
Да немного не так:
Создай глобальную переменную
Edits:array[1..10] of TEdit;
затем создание едитов:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
For i:=1 to 10 do
begin
Edits[i]:= TEdit.Create(Self) ;
with Edits[i] do
begin
Left := Random(self.ClientWidth);
Top := Random(self.Height);
width:=50;
parent:=self;
OnEnter:= EditsEnter;
Name:='MyEdit'+inttostr(i);
Tag:=i;
end;
end;
Ну а затем уже(допустим по событию Enter):
procedure TForm1.EditsEnter(Sender: TObject);
var i:integer;
begin
for i:=1 to 10 do begin
edits[i].text:='Your text';
end;
Edit1.Text:=IntToStr(Self.ActiveControl.Tag);
end;


Ответ отправлен: 29.10.2002, 02:23
Отправитель: Sanya


Отвечает Vladimir

Добрый день, pcgamer!
Так, конечно, не получится. Надо создавать массив "Едитов" и при создании формы (OnCreate) прорисовывать их. Вот тогда к ним можно будет обращаться по индексу в массиве.


Ответ отправлен: 30.10.2002, 10:20
Отправитель: Vladimir


Отвечает Idle Sign

Приветствую Вас, pcgamer!
===== Pro bono publico, no bloody panico! =====
Можно объявить массив из TEdit и в ран-тайме класть их на форму (Edit: array [1..10] of TEdit;), а потом и обращаться к ним в цикле.
ПиС: и не забудь i в строку преобразовать :)

Ответ отправлен: 30.10.2002, 13:53
Отправитель: Idle Sign



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (43)
C / C++ (27)
Perl (4)
Delphi (15)
Pascal (23)
Basic / VBA (8)
Java / JavaScript (9)
PHP (6)
MySQL / MSSQL (10)
Пользователю
Windows 95/98/Me (31)
Windows NT/2000/XP (19)
"Железо" (28)
Поиск информации (11)
Администратору
Windows NT/2000/XP (10)
Linux / Unix (13)
Юристу
Гражданское право (10)
Семейное право (6)
Трудовое право (5)
КоАП (6)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное