Вопрос № 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 раза меньше :)