Вопрос № 84320: Здраствуйте ув Експерты !
Как можно зделать помощь так что бы чек боксы выберались рандомно ?
например есть 10 чекбоксов и я хочу что бы 2 были выбранны случайно программой !!
Заранее спасибо всем за помощь!...Вопрос № 84370: Здравствуйте!
1) Почему код в Приложении постоянно вызывает ошибки доступа к памяти Access Violation в при вызове всплывающего меню в трее?
При этом, при наведении курсора на имя главной формы (ее имя FormIndex) пишется FormIndex = nil. Что э...Вопрос № 84383: Здравствуйте. А как в stringgrid сделать так, чтоб выводились не все значения после запятой, коих очень много, а, допустим, всего 2 или 3? Подскажите пожалуйста....
Вопрос № 84.320
Здраствуйте ув Експерты !
Как можно зделать помощь так что бы чек боксы выберались рандомно ?
например есть 10 чекбоксов и я хочу что бы 2 были выбранны случайно программой !!
Заранее спасибо всем за помощь!
Отправлен: 26.04.2007, 15:37
Вопрос задал: VaNuk (статус: 3-ий класс)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Ерёмин Андрей
Здравствуйте, VaNuk!
Такие операции удобно делать, когда имена элементов заданы по шаблону. См. пример в приложении. На форме должно быть 10 CheckBox'ов с именами от "CheckBox1" до "CheckBox10" соответственно. Удачи!
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Menand (статус: 10-ый класс)
Ответ отправлен: 26.04.2007, 17:06
Отвечает: Полищук Владислав Игоревич
Здравствуйте, VaNuk!
==========================
Ответ перенесен в мини-форум
==========================
Ответы в подобном стиле следует писать в мини-форум
-~= Gh0stik =~-
--------- Чтобы вчера не случилось, радуйся новому дню
Вот привожу еще один вариант, я допускаю что Ваши чекбоксы носят имена: CheckBox1, CheckBox2, CheckBox3, ... , CheckBox10
Тогда код будет такой: procedure TForm1.Button1Click(Sender: TObject);
var k1,k2,i:integer;
begin
for i:=1 to 10 do
TCheckBox(FindComponent(format('CheckBox%d',[i]))).Checked:=false; {выключаем все флажки (делаем "очистку")}
randomize;
k1:=random(10)+1;
TCheckBox(FindComponent(format('CheckBox%d',[k1]))).Checked:=true; {устанавливаем первый флажок}
repeat k2:=random(10)+1; until k1<>k2; {выбираем так второй номер, чтобы он не был одинаков с первым}
TCheckBox(FindComponent(format('CheckBox%d',[k2]))).Checked:=true;{устанавливаем второй флажок}
end;
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 26.04.2007, 17:12 Оценка за ответ: 5 Комментарий оценки: Спасибо ! Очень помогло есть над
чем подумать !
Отвечает: W@NDeReR
Здравствуйте, VaNuk!
Вот мой пример кода: А если CheckBox'ов 100 - что делать будем?!
(Ерёмин А.)
procedure TForm1.FormCreate(Sender: TObject);
var
q, w: integer;
begin
Randomize;
q:=Random(9); //Случайное число
w:=Random(9);
if (q =1) or (w=1) then //Если одна из переменных равна 1 то выбираеться первый CheckBox и так для каждого
CheckBox1.Checked:=true;
if (q =2) or (w=2) then
CheckBox2.Checked:=true;
if (q =3) or (w=3) then
CheckBox3.Checked:=true;
if (q =4) or (w=4) then
CheckBox4.Checked:=true;
if (q =5) or (w=5) then
CheckBox5.Checked:=true;
if (q =6) or (w=6) then
CheckBox6.Checked:=true;
if (q =7) or (w=7) then
CheckBox7.Checked:=true;
if (q =8) or (w=8) then
CheckBox8.Checked:=true;
if (q =9) or (w=9) then
CheckBox9.Checked:=true;
if (q =0) or (w=0) then
CheckBox10.Checked:=true;
end;
--------- Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 3-ий класс)
Ответ отправлен: 26.04.2007, 20:48 Оценка за ответ: 5 Комментарий оценки: Спасибо ! Очень помогло есть над чем подумать !
Вопрос № 84.370
Здравствуйте!
1) Почему код в Приложении постоянно вызывает ошибки доступа к памяти Access Violation в при вызове всплывающего меню в трее?
При этом, при наведении курсора на имя главной формы (ее имя FormIndex) пишется FormIndex = nil. Что это значит?
На другом компьютере таких ошибок не возникает. Как мне решить мою проблему?
2) При вызове меню значка в трее моей программы меню не исчезает при щелчке мышью в друге место. Можно устранить этот баг, кроме как SetForeground?
3) Что представляет собой окно CPU? Что там за цифры и буквы? Это окно может помочь мне в решении проблемы 1)
4) У меня есть файлы, которые я хочу запретить запускать вообще (в т.ч. и для себя) Это возможно?
5) Как заставить программу перезагружать компьютер?
Я использую Delphi 7 Enterprise. Буду очень благодарен за ответ!
Отвечает: Bingo
Здравствуйте, Тюрин Евгений Сергеевич!
Хочу помочь Вам с 5) пунктом, ведь проблема скорее всего так и не решилась... В свое время я тоже когда-то задавал такой вопрос.
-----
function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
----
Теперь, чтобы выключить компьютер, нужно вызвать эту функцию с параметром myexitwindows(ewx_poweroff or ewx_force), чтобы перезагрузить - myexitwindows(ewx_reboot or ewx_force).
Если же у Вас XP и выше, то перезагрузка осуществляется в одну строку:
ShellExecute(Application.Handle, 'shutdown', nil, '/t 0' + PARAMS, nil, SW_HIDE)
Где PARAMS одно из:
'/r' - перезагрузка
'/s' - выключение
Мои соображения насчет 2) пункта: я тоже долго мучался с такой проблемой, но потом бросил все и поставил себе BDS 2006. В нем есть такой компонент TTrayIcon, в котором все работает без проблем. Сейчас я нисколько не жалею, что переустановил Delphi7 на более лучший.
------
Удачи!
--------- C темным пивом в светлое будущее!
Ответ отправил: Bingo (статус: 4-ый класс)
Ответ отправлен: 28.04.2007, 20:02 Оценка за ответ: 4 Комментарий оценки: Спасибо большое, функция работает за глаза. Но вы забыли указать, что ShellExecute - API функия и в раздел uses необходимо добавить ShellAPI, иначе ShellExecute не работает. Будь я нащинающим, отнял бы у вас еще времени. Еще раз большое спасибо, я бы, перерыв все исходники, вряд ли нашел бы решение.
Вопрос № 84.383
Здравствуйте. А как в stringgrid сделать так, чтоб выводились не все значения после запятой, коих очень много, а, допустим, всего 2 или 3? Подскажите пожалуйста.
Для форматированного вывода вещественных чисел можно использовать такие функции:
s:string;
s:=FloatToStrF(t,ffFixed,7,2) - выводим вещественное число t с двумя знаками после запятой. И общим количеством цифр (включая запятую) в семь штук. :) Добавил sir henry
s:=FormatFloat('#.000',1234.1234); - выводим вещественное число с тремя знаками после запятой.
s:=Format('%5.4f',[1234.123467]); - выводим вещественное число с четырмя знаками после запятой.
Более подробно о параметрах и использовании этих функция можно прочитать в такой справке.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 26.04.2007, 23:27 Оценка за ответ: 5
Отвечает: Воронцов А.А.
Здравствуйте, SunnyKiller!
FormatFloat(формат - String,значение - Real,extended)- возвращаемое значение строка.
формат вот например
0 1234
#,##0.00 1,234.00
0.00 1234.00
--------- Иди вперёд и никогда не оглядывайся
Ответ отправил: Воронцов А.А. (статус: 3-ий класс)
Ответ отправлен: 27.04.2007, 01:43
Отвечает: Necromancer
Здравствуйте, SunnyKiller!
Для этого используется ф-ция FloatToStrF. Например, число 25,120845 можно перобразовать в строковый и присвоить ячейке таблицы следующим образом:
a := 25, 120845
StringGrid1.Cells[1,1] := FloatToStrF( a, ffFixed, 6, 2);
Получаем 6 символов на число, включая запятую, причем после запятой будет 2 символа.
Параметры в этой функции могут быть следующие:
ffGeneral Основной числовой формат. Число преобразуется по формату с фиксированной точкой или научному в зависимости от того, какой из них оказывается короче. Начальные нули удаляются, десятичная точка ставится только при необходимости. Фиксированный формат используется, если число разрядов слева от точки не больше указанной точности Precision и если значение не меньше 0.00001. В противном случае используется научный формат, в котором параметр Digits определяет число разрядов степени - от 0 до 4
ffExponent Научный формат. Число преобразуется в строку вида "-d.ddd...E+dddd". Общее число цифр, включая одну перед десятичной точкой, задается параметром Precision. После символа "E" всегда следует знак "+" или "-" и до четырех цифр. Параметр Digits определяет минимальное число разрядов степени - от 0 до 4
ffFixed Формат с фиксированной точкой. Число преобразуется в строку вида "-ddd.ddd...". По крайней мере одна цифра всегда предшествует десятичной точке. Число цифр после десятичной точки задается параметром Digits, который может лежать в пределах от 0 до 18. Если число разрядов слева от десятичной точки больше указанного параметром Precision, то используется научный формат
ffNumber Числовой формат. Число преобразуется в строку вида "-d,ddd,ddd.ddd...". Данный формат совпадает с ffFixed за исключением наличия в нем разделителей тысяч
ffCurrency Монетарный формат. Число преобразуется в строку, отображающую денежную сумму. Формат контролируется глобальными переменными CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator, задаваемыми для монетарного формата разделом Currency Format элемента International Контрольной панели Windows. Число цифр после десятичной точки задается параметром Digits, который может лежать в пределах от 0 до 18
Если преобразовываемое выражение окажется не числом, функция вернет значение "NAN". Если преобразовываемое значение превышает по модулю величину, допустимую для объявленного типа данных, функция вернет значение "INF" (бесконечность) или "-INF" (минус бесконечность).
--------- Никогда не сдавайся, даже если боишься проиграть
Ответ отправил: Necromancer (статус: 2-ой класс)
Ответ отправлен: 27.04.2007, 13:11 Оценка за ответ: 5