Приветствую, вас, эксперты. Подскажите, как в Дельфях пользоваться генератором случайных чисел (необходимо сгенерить 4-х значное число) И ещё вопрос: как сделать задержку на X секунд? Заранее благодарю.
Доброе время суток, Iv! Генератор случайных чисел: var I: Integer; begin Randomize;//инициализируем генератор I := Random(10000);//0<=I<10000 (4-х значное) ShowMessage(Format('%.4d',[I])); end; Задержка: Sleep(5000);//5 секунд
Ответ отправлен: 05.11.2002, 11:48 Отправитель: Рыжик Отвечает Vladimir
Приветствую Вас, Iv! while int<1000 do begin Randomize; int:=Random(9999); end;//Это генератор квазислучайных чисел Sleep(n);// задержка на n милисекунд
Ответ отправлен: 05.11.2002, 11:04 Отправитель: Vladimir Отвечает vitya
Здравствуйте, Iv! Для генерации случайных чисел пользуйся стандартной функцией: random(). В начале программы надо вызвать randomize(); Для того, чтобы генерить четырехзначное число надо сделать так: wRand := random(9000) + 1000; в данном случае ты получишь числа в диапазоне от 1000 до 9999. Для того, чтобы получить задержку вызывай АПИшную функцию Sleep(mseks);
Ответ отправлен: 05.11.2002, 15:38 Отправитель: vitya
Вопрос № 259
Здравствуйте ув. эксперты!!! Как можно сделать чтобы ProgressBar показывал прогрес копирования какоготонибуть файла?! Заранее благодарю!!!
Добрый день, Elvis! Используй функцию WinAPI CopyFileEx. Это первая и самая простая возможность. Другая - с помошью стандартных функций ввода-вывода. Один шаг ProgressBar = Одина операция чтения-записи. Колличество шагов ProgressBar= Размер файла/размер буфера для одной операции чтения-записи. Но это муторней. Лучше CopyFileEx. Там есть свой колбэк, который и позволяет все это делать с прогрессбаром. Ответ отправлен: 05.11.2002, 16:08 Отправитель: Jadd Отвечает Vladimir
Приветствую Вас, Elvis! Ну, если только файлы копировать самому побайтно. Вот тогда определяешь размер файла и, при копировании, выводишь все в ProgressBar.
Ответ отправлен: 05.11.2002, 16:01 Отправитель: Vladimir
Вопрос № 260
Доброе время суток, эксперты. Некой переменной X необходимо присвоить здачение текущего времени, точнее говоря секунд, подскажите как.
Добрый день, Iv! var X:integer; s:String; begin s:=FormatDateTime('ss',Now); X:=StrToInt(s); end;
Ответ отправлен: 05.11.2002, 16:18 Отправитель: Vladimir Отвечает vitya
Здравствуйте, Iv! Сделай вызор: GetSystemTime() или GetLocalTime(); Структура, которую они заполняют, содержит необходимое тебе поле. Ответ отправлен: 05.11.2002, 17:24 Отправитель: vitya Отвечает Jadd
Добрый день, Iv! Очень просто. Делать можно, например, так: var x: String; begin x:= FormatDateTime('ss', Now); Label1.Caption = x; end; Этот кусок кода будет брать текущее время в секундах и показывать его в лэйбле. Ответ отправлен: 05.11.2002, 16:13 Отправитель: Jadd Отвечает Necro
Приветствую Вас, Iv!
Приложение: Ответ отправлен: 05.11.2002, 17:24 Отправитель: Necro Отвечает Рыжик
Добрый день, Iv! procedure TForm1.Button1Click(Sender: TObject); var t:TDateTime; Hour,Min,Sec,MSec:Word; begin t:=Time; DecodeTime(t,Hour,Min,Sec,MSec); //теперь переменная Sec содержит кол-во секунд ShowMessage(IntToStr(Sec)); end;
Ответ отправлен: 06.11.2002, 10:17 Отправитель: Рыжик
Вопрос № 261
Всем привет! У меня вот какой вопрос: как можно получить доступ к дисководу на уровне секторов//дорожек и т.д., подобно int 13h в DOS, таким образом чтобы можно было читать//писать//форматить дискеты более других форматов нежели пц, например 80 дорог 2 стороны 32 сектора по 128 байт? Если такое возможно, то не сочтите за труд написать небольшой примерчик кода для подобных извращений (в смысле не работу с файловой системой, а только чтение//запись секторов и форматирование дорожек)... Заранее спасибо за помощь...
Приветствую Вас, TIMON! Вообще, это вещь довольно опасная. Поищи в рассылке, тут подобный вопрос задавался уже. Для таких манипуляций используй WinAPI. Функция CreateFile дает полный доступ к диску. Вместо параметра filename используй запись типа "\PHYSICALDRIVEx", где х - номер драйва или можно явную запись использовать типа "\A:". Вся остальная инфа в MSDN Ответ отправлен: 05.11.2002, 16:28 Отправитель: Jadd
Вопрос № 262
Здрвствуйте! Скажите пожалуйста как сделать так чтобы в DBgrid выделялась вся строка(как в listbox) а не только единственное поле? Еще как вывести записи базы данных в DBlistbox при этом используя Table и DataSource. Надеюсь вы поняли. Спасибо!
Добрый день, dude! У DBGrid есть в свойствах (см в Инспекторе Объектов) такое поле как Options. Оно содержит подпункты. Сейчас не помню точно, но вроде есть такое: AlwaysSelectRow (или как-то так). Вообще, из всех стандартных визуальных компонентов для работы с базами данных в Delphi я использую только DBGrid, причем с запрещенным редактированием внутри. Все остальные компоненты очень любят вызывать исключения при малейшем нарушении правил ввода... Так, для ввода данных в таблицу я использую несколько стандартных Edit'ов, ComboBox'ов и ListBox'ов. Обрабатываю все вручную - это все же легче, чем ловить исключения от глючных компонентов. Такой способ не запрещен, более того, он даже в книгах рассматривается. Это я тебе насчет DBListBox. А вообще, там надо просто указать в поле DataSource твой TDataSource, причем везде не забудь поставить
свойство Active и Enabled... В DBListBox укажи, какие поля ты хочешь отображать... Вроде все... Сорри, если что напутал - писал по памяти, лень делфу грузить. Если что - спрашивай еще - поможем...
Ответ отправлен: 05.11.2002, 23:03 Отправитель: baldr Отвечает Jadd
Приветствую Вас, dude! Значит, насчет первого: там свойство у грида есть. Ставится оно в Options. А называется dgRowSelect Ответ отправлен: 06.11.2002, 03:08 Отправитель: Jadd
Вопрос № 263
Подскажите пожалуйста как определить печатает принтер или нет. Надо остановить прогу на время печати и когда принтер закончит лист продолжить.
Приветствую Вас, Andy BitOff! uses Printers; begin if Printer.Printing then ...........
Ответ отправлен: 06.11.2002, 12:06 Отправитель: Рыжик
Вопрос № 264
Доброе время суток, эксперты. Вопрос: Как самому сделать процедуру, т.е. как в Паскале, процедура сначала описывается, а потом где-то в проге вызывается?
Доброе время суток, Iv! Ага... Сразу видно где ты запутался! ;) Понимаешь, дело все в том, что в Delphi предполагается написание кода не в самой программе, а в модуле!. То есть, сначала надо объявить процедуру в части interface, а потом описать в разделе implementation. Причем надо учитывать принадлежность процедуры какому-либо классу, в основном, классу текущей формы. В общем, попробуй создать простейшую программу на Delphi и посмотреть - как все функции описываются, а потом по аналогии сделать самостоятельно.
Ответ отправлен: 06.11.2002, 23:39 Отправитель: baldr Отвечает Jadd
Здравствуйте, Iv! Блин, ну что за вопросы пошли. Тебе самому-то не лень такое спрашивать? А мне лень на это отвечать. Читай книги по Паскалю. Ответ отправлен: 06.11.2002, 03:05 Отправитель: Jadd Отвечает Idle Sign
Приветствую Вас, Iv! ===== Pro bono publico, no bloody panico! ===== Именно как в Паскале :) Сначала процедура объявляется, также как и переменная (см. Рассылку - Вопрос №191 Выпуск №077 от 25.09.2002, 07:10) Далее описываем ее примерно так как это сделано в Приложении (еще посмотри Вопрос №208 Выпуск №083 от 07.10.2002, 19:30). Потом вызываем ее (опять гляди в Приложение).
Приложение: Ответ отправлен: 09.11.2002, 11:19 Отправитель: Idle Sign
Вопрос № 265
Здравствуйте ув.Эксперты!!! Как можно сделать чтобы при копировании файла, когда совпадает имя файла выполнялось мной заданое действие?
Здравствуйте, Elvis! ===== Pro bono publico, no bloody panico! ===== Проще так: перед копированием проверяем fileexists(filename:string), тогда делаем что нужно.
Ответ отправлен: 09.11.2002, 11:19 Отправитель: Idle Sign Отвечает Jadd
Здравствуйте, Elvis! Очень просто. CopyFile(SourceFileName, NewFileName, TRUE); В этом случае, если файл существует, копирования не произойдет и функция вернет FALSE, следовательно, следующее, что надо сделать - вызвать GetLastError(), если надо удостовериться, почему копирования не произошло. Удачи Ответ отправлен: 07.11.2002, 02:51 Отправитель: Jadd
Вопрос № 266
как сделать прогу невидимой в task bar? и засунуть в systray? Electronic
Здравствуйте, Electronic! ===== Pro bono publico, no bloody panico! ===== Делаем невидимой так - Вопрос №235 Выпуск №092 от 27.10.2002, 10:10. Суем в СисТрей так - Вопрос №201 Выпуск №081 от 03.10.2002, 19:10. Ответ отправлен: 09.11.2002, 11:19 Отправитель: Idle Sign Отвечает Jadd
Доброе время суток, Electronic! Поищи в рассылке. Тут уже задавался подобный вопрос. Ответ отправлен: 07.11.2002, 02:53 Отправитель: Jadd
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.