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

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


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

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

Выпуск № 837
от 12.06.2007, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 473, Экспертов: 78
В номере:Вопросов: 6, Ответов: 26


Вопрос № 90300: Уважаемые господа У кого есть подробный пример работы с функцией GetProcessMemoryInfo() нужно узнать сколько памяти занимает процесс ну к примеру Project1.exe Delphi 7 Win XP SP=0...
Вопрос № 90324: Здравствуйте уважаемые эксперты!Мне в моём приложении необходимо что бы при клике по StringGrid'у у таблицы подсвечивалась бы та строка на которую пришёлся клик, а в переменную ARow заносился бы индекс этой строки....
Вопрос № 90326: Привет всем! Вопрос следующий. В объекте есть несколько методов-ф-ций с одинаковым набором параметров и возвращаемым типом. (Напр. ф-ции формируют строку для INSERT, UPDATE и DELETE). Также существует метод-процедура, в которой нужно вызывать одну из...
Вопрос № 90355: Господа эксперты! Подскажите компонент - Label с выводом текста по вертикали. На Torry не нашел, а ставить ради одного компонента большой пакет не хочется. Спасибо. Vitaly Grobshtein...
Вопрос № 90361: Здраствуйте ! Проблема с TtreeView ! Как зделать так что бы в скомпилированной программе selectedindex изменялся ? напиример по томуже счетчику ! Заранее спасибо !...
Вопрос № 90427: можно ли в Delphi перевести переменную типа real в переменную типа string....

Вопрос № 90.300
Уважаемые господа
У кого есть подробный пример работы с функцией GetProcessMemoryInfo()
нужно узнать сколько памяти занимает процесс ну к примеру Project1.exe
Delphi 7 Win XP SP=0
Отправлен: 06.06.2007, 16:53
Вопрос задал: Lejon (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Н.В.
Здравствуйте, Lejon!

Описание функции GetProcessMemoryInfo

Пример:
uses psAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
pmc:PPROCESS_MEMORY_COUNTERS;
begin
GetMem(pmc, SizeOf(_PROCESS_MEMORY_COUNTERS));
pmc.cb:=SizeOf(_PROCESS_MEMORY_COUNTERS);
If GetProcessMemoryInfo(GetCurrentProcess(), pmc, pmc.cb) then
Application.MessageBox(PChar(IntToStr(pmc^.WorkingSetSize)+' Bytes'),
'Memory', MB_OK or MB_ICONINFORMATION)
else
Application.MessageBox('Unable to retrieve memory usage structure',
'Memory', MB_OK or MB_ICONINFORMATION);
FreeMem(pmc);
end;
Ответ отправил: Н.В. (статус: Студент)
Ответ отправлен: 06.06.2007, 16:59
Оценка за ответ: 5

Отвечает: Кэр Лаэда
Здравствуйте, Lejon!

http://delphiworld.narod.ru/
uses psAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
pmc: PPROCESS_MEMORY_COUNTERS;
cb: Integer;
begin
cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
GetMem(pmc, cb);
pmc^.cb := cb;
if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then
Label1.Caption := IntToStr(pmc^.WorkingSetSize) + ' Bytes'
else
Label1.Caption := 'Unable to retrieve memory usage structure';

FreeMem(pmc);
end;

Ответ отправил: Кэр Лаэда (статус: 10-ый класс)
Ответ отправлен: 06.06.2007, 17:01
Оценка за ответ: 5

Отвечает: PGM
Здравствуйте, Lejon!

Вот универсальный вариант из рабочей программы (см.приложение).

Приложение:

Ответ отправил: PGM (статус: 8-ой класс)
Ответ отправлен: 07.06.2007, 00:51
Оценка за ответ: 5
Комментарий оценки:
Наиогромнейшее спасибо!!! Об этой функции я и мечтать не мог.
Но delphi ругался пока
pps : TPROCESS_MEMORY_COUNTERS; не переименовал в
pmc : TPROCESS_MEMORY_COUNTERS;
но это мелочи если можно было поставить 10 я бы с радостью сделал бы это!!!

Отвечает: xXx
Здравствуйте, Lejon!
Смотрите приложение. Данный код показывает размер текущего процесса...

Приложение:

Ответ отправил: xXx (статус: 6-ой класс)
Ответ отправлен: 07.06.2007, 05:55
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо


Вопрос № 90.324
Здравствуйте уважаемые эксперты!Мне в моём приложении необходимо
что бы при клике по StringGrid'у у таблицы подсвечивалась бы та строка на которую пришёлся клик, а в переменную ARow заносился бы индекс этой строки.
Отправлен: 06.06.2007, 19:19
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Устинов С.Е.
Здравствуйте, GAZOT!

В событие OnClick объекта StringGrid поместите: ARow:=StringGrid1.Row; или ARow:=StringGrid1.Selection.Top;.
А для "подсветки" в Options объекта StringGrid установите свойство goRowSelect:=true, или во время выполнения программы StringGrid1.Options:=StringGrid1.Options+[goRowSelect];

Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Специалист)
Ответ отправлен: 06.06.2007, 19:33
Оценка за ответ: 5

Отвечает: Ерёмин А.А.
Здравствуйте, GAZOT!
Добавлю, что вместо OnClick можно использовать специальное событие "при выделении ячейки" - OnSelectCell(). Это надёжнее. Единственное неудобство - у этого события уже есть локальная переменная с именем ARow, т.е. придётся либо глобальную переменную назвать иначе, либо немного схитрить. Лучше схитрить :-) А делается просто.
Допустим, объявлена необходимая глобальная переменная ARow:

var
Form1: TForm1;
..
ARow: Integer;


Тогда пишем простую процедуру смены её значения:

procedure ChangeARow(NewValue: Integer);
begin
ARow:=NewValue
end;


А в событии OnSelectCell() вызываем нашу процедуру:

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
ChangeARow(ARow)
end;


Всё довольно просто. Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 06.06.2007, 20:04
Оценка за ответ: 5

Отвечает: Sashok
Здравствуйте, GAZOT!
Для того чтобы подсвечивалась вся строка достаточно включить опцию StringGrid1.Options.goRowSelect в диспетчере объектов. Индекс текущей выделенной строки всегда автоматически заносится в Stringgrid1.Row.
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 06.06.2007, 21:22
Оценка за ответ: 4

Отвечает: Градов Юрий Михайлович
Здравствуйте, GAZOT!
Обрабатываете событие onDrawCell, там же можно взять координаты ячейки aCol,ARow.

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 06.06.2007, 21:46
Оценка за ответ: 5


Вопрос № 90.326
Привет всем! Вопрос следующий. В объекте есть несколько методов-ф-ций с одинаковым набором параметров и возвращаемым типом. (Напр. ф-ции формируют строку для INSERT, UPDATE и DELETE). Также существует метод-процедура, в которой нужно вызывать одну из этих ф-ций. Можно ли передать ф-цию в качестве параметра метода-процедуры? Если можно, то как это выглядит синтаксически.
Отправлен: 06.06.2007, 19:30
Вопрос задал: Idens (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Устинов С.Е.
Здравствуйте, Idens!

Думаю саму функцию передать в метод-процедуру не получится, можно передать только ее результат.
Лучше передать в метод-процедуру не функцию, а символ, отвечающий за функцию, например так:

procedure ffffff(ch: Char, __ тут остальные параметры для функций __);
begin
case ch of
'i': FuncInsert(__параметры__);
'u': FuncUpdate(__параметры__);
'd': FuncDelete(__параметры__);
end;
end;


Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Специалист)
Ответ отправлен: 06.06.2007, 19:39

Отвечает: Ерёмин А.А.
Здравствуйте, Idens!
Да, функции можно передавать. Условие только одно - параметры должны быть похожие (т.е. их количество и типы должны совпадать). Для работы удобно объявить тип данных "ссылка на функцию". Приведу пример с двумя функциями, работающими с числами.
Создаём тип данных - ссылку на функцию с двумя числовыми параметрами и числовым выходным параметром:

type
TFunc = function(A,B: Integer): Integer;


Далее описываем две разных функции - пусть одна будет складывать числа, а другая их перемножать:

function FuncAdd(A,B: Integer): Integer;
begin
Result:=A+B;
end;

function FuncMult(A,B: Integer): Integer;
begin
Result:=A*B;
end;


Далее мы можем пользоваться нашим типом данных - можем завести переменную этого типа и присвоить ей какую-либо функцию. Вызвать нашу функцию можно по имени переменной. Продолжение примера:

procedure TForm1.Button1Click(Sender: TObject);
Var MyFunc: TFunc; R: Integer;
begin
if MessageDlg('Сложить числа?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
MyFunc:=FuncAdd
else
MyFunc:=FuncMult;
R:=MyFunc(5,5);
ShowMessage(IntToStr(R));
end;


Что происходит: появляется диалоговое окно и спрашивается, что сделать с числами. Если выбрано сложение, присваиваем нашей функции функцию сложения, иначе - функцию умножения. А затем вызываем функцию как обычно и выводим результат её работы. В зависимости от ответа на вопрос результатом будет соответственно либо 5 + 5 = 10, либо 5 * 5 = 25.

Данный механизм довольно удобен.

Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 06.06.2007, 19:54

Отвечает: Sattar
Здравствуйте, Idens!
Если правильно понял то код в приложении.
Будут вопросы обращайся.

Приложение:

---------
Programming is like sex, one mistake and you have to support it for the rest of your life.

Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 06.06.2007, 20:32

Отвечает: Sashok
Здравствуйте, Idens!
Передать в качестве параметра процедуру или функцию можно. Передаётся указатель на неё. Сначала объявляешь тип функции или процедуры:

type TMyfunc = function (a: integer; b: integer): integer;

А потом в заголовке функции или процедуры пишешь:

function MainFunc (a: integer; b: TMyfunc): integer;

Далее в реализации функции вызываешь: b(a,c);
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 06.06.2007, 21:14

Отвечает: Louken
Здравствуйте, Idens!

Попробуйте так:

TF=function(...): string of object;
вместо:
TF=function(...): string;
Ответ отправил: Louken (статус: 3-ий класс)
Ответ отправлен: 06.06.2007, 22:42

Отвечает: PGM
Здравствуйте, Idens!

Судя по тому, что предыдущие ответы вас не удовлетворили, вам требуется такой вариант описания типа функции

TF=function(...): string of object;

Тогда можно использовать методы в качестве параметров-функций (если их описание совпадает с тем что у вас за многоточием, естественно).

Приложение:

Ответ отправил: PGM (статус: 8-ой класс)
Ответ отправлен: 07.06.2007, 00:44


Вопрос № 90.355
Господа эксперты!
Подскажите компонент - Label с выводом текста по вертикали. На Torry не нашел, а ставить ради одного компонента большой пакет не хочется.
Спасибо.

Vitaly Grobshtein
Отправлен: 06.06.2007, 23:56
Вопрос задал: Vitaly (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Градов Юрий Михайлович
Здравствуйте, Vitaly!
Используйте Canvas и TextOut.
Этот пример выводит на Form1.Canvas текст. Пример из DelphiWord6
http://delphiword.narod.ru

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 07.06.2007, 00:51
Оценка за ответ: 3
Комментарий оценки:
Спасибо, но мне нужна именно Label с ее Align и OnClick.

Отвечает: Архангельский Андрей Германович
Здравствуйте, Vitaly!

Raize Components теперь идет как замена популярной библиотеке RxLib2.75
В этой библиотеке есть очень много чего, в том числе и поворот текста и не только в Label
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 07.06.2007, 07:38


Вопрос № 90.361
Здраствуйте ! Проблема с TtreeView !
Как зделать так что бы в скомпилированной программе selectedindex изменялся ? напиример по томуже счетчику !
Заранее спасибо !
Отправлен: 07.06.2007, 00:52
Вопрос задал: VaNuk (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Gh0stik
Здравствуйте, VaNuk!

Вам достаточно воспользоваться таким подходом:
node.SelectedIndex:=random(ImageList1.Count-1)+1;, где node:TTreeNode;
В данном случаем индекс будет сгенерирован произвольно в зависимости от количества картинок в ImageList1.

Более детальный код смотрите в приложении, а еще лучше полный проект в прикрепленном файле.

Good Luck!!!

Приложение:

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 07.06.2007, 23:27


Вопрос № 90.427
можно ли в Delphi перевести переменную типа real в переменную типа string.
Отправлен: 07.06.2007, 15:26
Вопрос задал: Сидоров Александр Александрович (статус: Посетитель)
Всего ответов: 9
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Кэр Лаэда
Здравствуйте, Сидоров Александр Александрович!

можно
воспользуйтесь функцией FloatToStr()
Ответ отправил: Кэр Лаэда (статус: 10-ый класс)
Ответ отправлен: 07.06.2007, 15:30

Отвечает: Rusland
Здравствуйте, Сидоров Александр Александрович!
Для этого есть функция FloatToStr.
Ответ отправил: Rusland (статус: Профессионал)
Россия, Казань
Адрес: Мой адрес не дом и не улица, мой адрес советский союз
WWW: Логотипы для сотовых телефонов
----
Ответ отправлен: 07.06.2007, 15:30

Отвечает: Ерёмин А.А.
Здравствуйте, Сидоров Александр Александрович!
Преобразование вещественного числа в строку делается с помощью функций FloatToStr() и FloatToStrF(). Вторая функция позволяет дополнительно указать количество символов, которые будут оставлены после запятой, а также общий формат числа. В общем случае первая функция выполняет то, что требуется. Пример:
var a: Real; Str: String;
...
Str:=FloatToStr(a);

Удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 07.06.2007, 15:31

Отвечает: Н.В.
Здравствуйте, Сидоров Александр Александрович!
Используйте функцию FloatToStr или FloatToStrF

Удачи!
Ответ отправил: Н.В. (статус: Студент)
Ответ отправлен: 07.06.2007, 15:32

Отвечает: Левадны Тимур Русланович
Здравствуйте, Сидоров Александр Александрович!
...
var s:string;
x:real;
...
s:=Flosttostr(x);
...
Ответ отправил: Левадны Тимур Русланович (статус: 1-ый класс)
Ответ отправлен: 07.06.2007, 15:37

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Сидоров Александр Александрович!

Дополню: есть еще функции Format и FormatFloat, с их помощью вы можете управлять форматированием числа при преобразовании
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 8-ой класс)
Ответ отправлен: 07.06.2007, 15:38

Отвечает: Градов Юрий Михайлович
Здравствуйте, Сидоров Александр Александрович!
var i: real;
s: string;
begin
s:=FloatToStr(i);
end;

---------
Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 07.06.2007, 15:49

Отвечает: Фадеев Юрий
Здравствуйте, Сидоров Александр Александрович!
floattostr(переменная)
Ответ отправил: Фадеев Юрий (статус: 1-ый класс)
Ответ отправлен: 07.06.2007, 16:28

Отвечает: Sashok
Здравствуйте, Сидоров Александр Александрович!
var
st: string;
r: real;
begin
st:=FloatToStr(r);
// обратно
r:=StrToFloat(st);
end.
Ответ отправил: Sashok (статус: 3-ий класс)
Ответ отправлен: 07.06.2007, 17:52
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное