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