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

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


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

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

Выпуск № 769
от 03.04.2007, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 456, Экспертов: 81
В номере:Вопросов: 4, Ответов: 8


Вопрос № 80078: Здравствуйте! У меня несколько вопросов: 1) Как указать необязательные параметры в функции? 2) Зачем при вызове процедур и функций из dll нужно указывать слово external и зачем оно вообще? 3) То же самое про stdcall...
Вопрос № 80176: Здравствуйте. Подскажите пожалуйста, срочно нужно реализовать следующее: При нажатии клавиши F10 с экрана снимается скриншот, сохраняется в папке под именнем, равным дате вида ДМГ....часминсек. Спасибо....
Вопрос № 80197: Здравствуйте. Я на Delphi программирую недавно. Дайте пожалуста ссылки или подскажите где и как взять информацию о "железе" ПК и установленном на нем софте. Т.е. хочу при запуске ПК запускать данную программу, чтобы она анализировал...
Вопрос № 80234: Здравствуйте, уважаемые эксперты. Как заставить приложение, написанное на Delphi, переместить оперативную память в файл подкачки? Если не понятно, тогда пример. Запустив Delphi (например BDS 2006), он начинает долго грузиться =). В это время...

Вопрос № 80.078
Здравствуйте!
У меня несколько вопросов:
1) Как указать необязательные параметры в функции?
2) Зачем при вызове процедур и функций из dll нужно указывать слово external и зачем оно вообще?
3) То же самое про stdcall
Отправлен: 28.03.2007, 12:05
Вопрос задал: Troyan (статус: 9-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

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

2) это слово говорит о том, что функция внешняя по отношению к вызывающему модулю. Компилятор ничего о ней не знает.
3) Говорит о том, что форма вызова соответствует принятой в языке C, не смотря на то, что модуль и сама dll могут быть написаны на Паскале. Это также указание компилятору
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 28.03.2007, 12:13
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

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

1.
procedure Proc(Param1: Integer; Param2: Integer = 25);
Param2 - необязательный, в списке параметров необязательные должны быть в самом конце, и обязательные между ними вклиниваться не должны. С функциями так же. Вызов
Proc(2000) эквивалентен Proc(2000, 25)

2. External означает "внешний", т.е. реализовано не в данном приложении. После external указывается имя dll, из которой функция и вызывается

3. Stdcall - это модель вызова процедур и функций по стандарту языка Си. Используется для вызова функций, которые были откомпилированы с указанием этой модели вызова. Если dll компилировали из Delphi, и у ее функций не указывали модель вызова - по умолчанию используется модель register, и вызов функций тогда нужно выполнять и использованием этой можели, а не stdcall.
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 7-ой класс)
Ответ отправлен: 28.03.2007, 12:15
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: sir henry
Здравствуйте, Troyan!
1) Можно задать эту функцию с параметрами, у которых будет присвоено значение по умолчанию, например:

Function MyFunc(s: string; i: integer=0): boolean;

В этом случае при вызове функции в своей программе последний параметр Вы можете не указывать, а в самой функции этот параметр будет иметь значение 0 и Вы можете его спокойно использовать.

Var
l: boolean;
Begin
...
//Без последнего параметра
l:=MyFunc('Какая-нибудь строка');
//С последним параметром, если он отличается от значения по умолчанию
l:=MyFunc('Какая-нибудь строка', 5);
End;

Все параметры со значением по умолчанию в списке параметров должны быть на последнем месте.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 28.03.2007, 12:24
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

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

1) для этого в описании процедуры после описания переменной надо поставить знак "=" и значение по умолчанию, эти параметры могут быть только в конце списка параметров

2) external - чтобы компилятор не искал в компилируемых модулях данную процедуру и "поверил на слово", что потом все будет ;),

3) stdcall - соглашение о вызовах (порядок размещения параметров в стеке) принятое для Windows API, (но он используется не всегда, для некоторых DLL может понадобиться, например, cdecl)

Ответ отправил: PGM (статус: 2-ой класс)
Ответ отправлен: 28.03.2007, 16:43
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Просто и понятно


Вопрос № 80.176
Здравствуйте. Подскажите пожалуйста, срочно нужно реализовать следующее:
При нажатии клавиши F10 с экрана снимается скриншот, сохраняется в папке под именнем, равным дате вида ДМГ....часминсек. Спасибо.
Отправлен: 28.03.2007, 22:54
Вопрос задал: Dende-Soft (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

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

Начнем с необходимых объектов, которые должны быть на форме - это всего навсего Image1: TImage;. Далее настроим форму ее свойство KeyPreview изменяем True.

Так же создаем обработчик FormKeyDown:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var hand:hwnd;
tFrm:TFormatSettings;
dirName:String;
begin
tFrm.LongTimeFormat:='dd_MM_yyyy__hh_mm_ss';
dirName:=ExtractFileDir(Application.ExeName)+''+DateToStr(now,tFrm);
if Key = VK_F10 then
begin
if not DirectoryExists(dirName) then
if not CreateDir(dirName) then
raise Exception.Create('Cannot create '+dirName)
else
begin
ImageDesk.Refresh;
hand:=GetDesktopWindow;
ImageDesk.Picture.Bitmap:=WindowToBMP(hand);
ImageDesk.Picture.SaveToFile(dirName+'screen.bmp');
end;
end;
end;


Код программы функции WindowToBMP(), а также всей программы Вы можете найти в приложении.

Обращу внимание на то что Вы просили чтобы папка была под именем вида ДМГ....часминсек - Вы хоть раз пробовали создать папку со знаками "", так вот у Вас это не выйдет потому в программе формат такой: dd_MM_yyyy__hh_mm_ss.

Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

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


Вопрос № 80.197
Здравствуйте.
Я на Delphi программирую недавно.
Дайте пожалуста ссылки или подскажите где и как взять информацию о "железе" ПК и установленном на нем софте. Т.е. хочу при запуске ПК запускать данную программу, чтобы она анализировала состав ПК и установленный на нем софт и записывала полученную информацию в файл.
Буду благодарен ссылкам с открытыс исходным кодом
Отправлен: 29.03.2007, 06:22
Вопрос задал: Zlm1 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

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

1) В приложении лежит код программы которая создает список установленных программ. (на форму Вам нужно положить только объект ListBox1, а также дополнительно прописать в uses Registry). Поскольку код выдрал из своей программы по администрации машины возможно в процедуре остались лишние строки - если будут вопросы отвечу, но в целом код работоспособный (проверил...).

2) По поводу установленного софта рекомендую Вам компонент MiTeC Computer Information - найти его Вы сможете на такой странице.

Good Luck!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 29.03.2007, 09:01
Оценка за ответ: 5
Комментарий оценки:
спасибо за оперативный ответ. Буду разбираться.

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Zlm1!
Вот исходники прожки о которой я говорил в мини-форуме. Результат пары часов выяснения как расшифровать результат функции cpuid и еще пары часов на все остальное.

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Специалист)
Ответ отправлен: 30.03.2007, 01:36
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за письмо и приложение. Буду разбираться.


Вопрос № 80.234
Здравствуйте, уважаемые эксперты.
Как заставить приложение, написанное на Delphi, переместить оперативную память в файл подкачки? Если не понятно, тогда пример. Запустив Delphi (например BDS 2006), он начинает долго грузиться =).
В это время всякие библиотеки и модули загоняются в оперативку. Когда он загрузился, память (у меня) достигает под 90 метров, а потом - раз - и все в файл подкачки, а в оперативке висит каких-то жалких 10 метров. Кто понял, чего я хочу, помогите!!!
Отправлен: 29.03.2007, 10:53
Вопрос задал: Win2k (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

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

Идея понятна, но вряд ли реализуема. В Windows есть средств, чтобы "закрепить" страницы в памяти, но что-то мне не попадалось способов принудительного вытеснения - разве что занять всю оставшуюся память чем-то ненужным, спровоцировав систему на свопинг, а потом освободив ее. Но это нисколько не облегчит время загрузки приложения. Кроме того система достаточно умна, чтобы не грузить, то что не используется - большая часть исполняемых файлов просто отображаются в память, но не загружаются реально пока не потребуется нужный кусок кода.
Ответ отправил: PGM (статус: 2-ой класс)
Ответ отправлен: 29.03.2007, 12:15
Оценка за ответ: 4
Комментарий оценки:
Но интересно, как же Delphi умудрился так сделать? Дело в том, что если использовать AlphaSkins, то объем памяти вырастает до 15метров, а надо что бы было хотя бы в 3 раза меньше :)


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: support@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное