Помощь - Поиск - Пользователи - Календарь
Полная версия: Мелочи жизни
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Alex7
Вобщем решил создать темку, для решения, обсуждения всякких таких мелких ньюансов и деталей для создания различных прог.
Alex7
Ну, так как я еще не профи,так что первый вопросы и задам: wink.gif

"Блокировка" nosound
Как я понимаю, то в Windows есть автоматичесая ф-я nosound.
Сделал я такое заключение из того, что после запуска

команды(проги) в среде TP звук не прекращается, пока не поступит

команда nosound, а в Windows я смог организовать длительный звук

только в случае такого написания:
Uses CRT;
Var i:longint;
Begin
For i:=1 to 999999999 do
sound(80);
End.
============================================
Обращение к секундомеру-часам.
Как вместо процедуры(правильно я ее обозвал?)

delay(<миллисекунды>); сделать точное обращение к часам

компьютера, для соблюдения одинокового интервала времени на

разных процессорах?(на старых процесорах проц-ра работает

правильно, на новых- ужасно ускоряется)
============================================
Эмуляция одновременных процесов.
Как можно искуственно сделать два одновременно выполняющихся

процеса?
К примеру задача:
Во время вычисления(какого-либо) в програме, на экран вывести

уведомление"Подождите" и три последовательно выводящиеся

точки. Т.е. такой цикл:
For i:=1 to 3 do
begin
write('.'); for j:=1 to 4 do delay(9999);
end;
gotoxy(wherex-3,wherey); write(' '); gotoxy(wherex-3,wherey); for

j:=1 to 4 do delay(9999);
============================================
Скрытие курсора.
Как сделать, чтобы во время вывода на экран курсор не появлялся?

Можно ли этим управлять в самой програме?
Например при выводе предыдущего цикла, чтобы под '.' не было

курсора.
============================================
Работа системных файлов.
Как обеспечить невидимость работы програмы(*.exe), когда это

нетребуется, опять таки, возможно ли управление, или только- "есть

окно", или "нету окна"? Имеется ввиду чтобы при запуске exe не

появлялось никаких признаков работы проги?
============================================
Перезапись защищенных файлов.
Существуют ведь файлы с разными видами доступа. Как програме

дать права реврайтить любые файлы?
============================================
For .. to .. do & If .. then .. else
Я слышал и, наверное, ощущал на практике, что эти операторы не

поддерживают некоторых типов переменных. Можете подсказать в

чем причина таких недоразумений, и как их избегать?
============================================
Символы разделители.
Можно ли как-то выразить одним словом(есть ли такое,или можно ли

его задать?) все разделители(space,enter,tab) ?
К примеру используя ф-ю Pos(st,1,<общее слово>); для ятения до

любого знака разделения? {Может с enter пример не яркий, т.к. string

не может содержать внутпри enter, но все-же...}
volvo
Alex7, ответы на все эти вопросы можно найти в поиске по форуму...
Цитата
Обращение к секундомеру-часам.

работай с MemL[$0040:$006c] и будет тебе счастье... Или 32-бита (там все нормально работает...)

---------------

Цитата
Как можно искуственно сделать два одновременно выполняющихся процеса?
Переходи под 32-бита и используй TThread, или (если хочется поизвращаться для DOS) - обрабатывай прерывание таймера...

---------------

Цитата
Скрытие курсора.

Здесь: Курсор

---------------

Цитата
Как обеспечить невидимость работы програмы(*.exe)

А вирусы здесь не пишут... no1.gif А кроме всего прочего, есть еще и CreateProcess...

---------------

Цитата
Перезапись защищенных файлов.

Зависит от OC и того, какие, извините у тебя привилегии...

---------------

Цитата
Я слышал и, наверное, ощущал на практике, что эти операторы не поддерживают некоторых типов переменных

Так "наверно" или ощущал? Если ты про невозможность работать с Real/Double/Extended в цикле For, то есть еще 2 вида циклов (While + Repeat ... Until), в который это прекрасно реализуется. Не надо изобретать велосипед...

---------------

Цитата
Можно ли как-то выразить одним словом(есть ли такое,или можно ли его задать?) все разделители(space,enter,tab)

Можно, но для этого придется переписать функцию Pos... Несколько разделителей задается так:
Const Delimiters = [#32, ',', '.', '!', '?']
Пример использования - в FAQ-е "Строки"

P.S. Внимательно прочти мою подпись и почаще пользуйся ссылками, которые в ней есть ...
Atos
Цитата
Перезапись защищенных файлов.
Существуют ведь файлы с разными видами доступа. Как програме дать права реврайтить любые файлы?
Если имеется в виду свойство файла "доступен только для чтения", то нужно изменить соответствующий атрибут, я об этом писал в комментариях к программе см
Копирование файла
Alex7
Цитата
ответы на все эти вопросы можно найти в поиске по форуму...
Да как и всегда, только когда они нужны уже, то никогда их не найдешь - закон подлости. Вот после нескольких неудачных попыток я и решил так спросить! give_rose.gif
Цитата
работай с MemL[$0040:$006c] и будет тебе счастье...
"два целочисельных типа, разделеные двоеточием определяют сегмент и смещение памяти" Это у меня в Хелпе так написано. Что бы это значило, и как именно подсчитать(в каких единицах), точное время, и что означает MemL[$0040:$006c] ?
Цитата
Или 32-бита (там все нормально работает...)
Если ты про процесор, то у меня стоит 32. А в университете не знаю, но древнее - эт точно, вобщем факт - разница ощутима.
Цитата
Переходи под 32-бита и используй TThread, или (если хочется поизвращаться для DOS) - обрабатывай прерывание таймера...

А можно об этом подробней рассказать, или послать туда, где мугу на доступном уровне это прочитать? а именно, что значит "TThread" и "обрабатывай прерывание таймера" ?
Цитата
Скрытие курсора
работает, но так ка я только что стыкнулся впервые с процедурами, то сложновато понять ее работу( wacko.gif
Цитата
А вирусы здесь не пишут... А кроме всего прочего, есть еще и CreateProcess...
Ты ж ведь тоже не вирусы пишешь(я так думаю smile.gif ), но знаешь как! Что такое "CreateProcess" Ф-я?
Цитата
Зависит от OC и того, какие, извините у тебя привилегии...
Я так понял, что вполне хватит сделать и того(SetFAttr(f,0);), что описано здесь
Цитата
Не надо изобретать велосипед...

Понял! Просто мне нужно было убедится, что это так, а то не хочется кому-то говорить неточную информацию.
Цитата
Const Delimiters = [#32, ',', '.', '!', '?']
А потом писать Pos(st,1,Delimiters) ?
Цитата
P.S. Внимательно прочти мою подпись и почаще пользуйся ссылками, которые в ней есть ...
Как уже написал выше - стараюсь, но иногда таки приходится делать и так
trminator
Цитата
Может с enter пример не яркий, т.к. string не может содержать внутпри enter, но все-же...
С чего это вдруг не может?
Код
var s: string;
<...>
   s := 'первая часть' + #13#10 + 'Вторая часть';
   write(s);
<...>

Цитата
"два целочисельных типа, разделеные двоеточием определяют сегмент и смещение памяти" Это у меня в Хелпе так написано. Чтобы это значило, и как именно подсчитать(в каких еденицах), точное время, и что означает MemL[$0040:$006c] ?
Еще в хелпе должно быть где-то написано, что шестнадцатиричные числа выглядят как раз примерно как $006C. A,B,C,D,E,F -- шестнадцатиричные "цифры"

Цитата
Цитата
Зависит от OC и того, какие, извините у тебя привилегии...
Я так понял, что вполне хватит сделать и того(SetFAttr(f,0);), что описано здесь
OlegZ имел ввиду совсем общий случай. Это под ДОС любой может сменить атрибуты у файла, а ежели ты под, извиняюсь, Unix пишешь...
Цитата
Если ты про процесор, то у меня стоит 32.
Еще надо 32-битный компилятор использовать для полного счастья. Turbo Pascal -- 16-битный, Free Pascal или Delphi -- 32-битные. Всякие прелести типа TThread -- из 32-битных.

Цитата
работай с MemL[$0040:$006c] и будет тебе счастье...
Или опиши переменную примерно так:
Код
var time : longint absolute 0:$046C;

В переменной time будет прибавляться единичка 18.5 раз в секунду.
Alex7
Цитата
Еще в хелпе должно быть где-то написано, что шестнадцатиричные числа выглядят как раз примерно как $006C. A,B,C,D,E,F -- шестнадцатиричные "цифры"
Ясно, тогда в каких это единицах написано? в милисекундах? можете параметры MemL объяснить?
Цитата
Или опиши переменную примерно так:
Код
var time : longint absolute 0:$046C;
В переменной time будет прибавляться единичка 18.5 раз в секунду.
И как мне это тогда использовать? Что мне даст что В переменной time будет прибавляться единичка 18.5 раз в секунду. ???? give_rose.gif
Цитата
OlegZ имел ввиду совсем общий случай. Это под ДОС любой может сменить атрибуты у файла, а ежели ты под, извиняюсь, Unix пишешь...
Под ХР
Цитата
Еще надо 32-битный компилятор использовать для полного счастья. Turbo Pascal -- 16-битный, Free Pascal или Delphi -- 32-битные. Всякие прелести типа TThread -- из 32-битных.
Ну то хорошо, перейду я, а другие, если будут прогу юзать, то как будут? не буду ж я всем exe давать!
volvo
Цитата
И как мне это тогда использовать? Что мне дасть что В переменной time будет прибавляться единичка 18.5 раз в секунду. ?
Пишешь свою процедуру задержки (вместо Delay): пауза, пока содержимое Time не изменилось на достаточное количество единиц. Один простой While ...

Цитата
Под ХР
Вот у тебя, например, админский аккаунт, а у меня - пользовательский... Все, что ты написал, и у тебя это отработало, можешь оставить себе - у меня просто может не хватить привилегий, чтобы прога запущенная с моего User-а меняла атрибуты, или что-то в этом роде...

Цитата
перейду я, а другие, если будут прогу юзать, то как будут?
Ну, тогда напиши заново Windows и передавай в исходниках... Что ты хочешь, из 16-битного Паскаля работать с TThread? Не будет этого...
Alex7
Цитата
Пишешь свою процедуру задержки (вместо Delay): пауза, пока содержимое Time не изменилось на достаточное количество единиц. Один простой While ...
Понимаешь, я просто не могу понять как именно она работает! mega_chok.gif
Какие числа ставить внутри скобок, а какое за ними!??? Пож-сто примерчик! я не въезджаю! wub.gif
Цитата
то ты хочешь, из 16-битного Паскаля работать с TThread? Не будет этого...
Я просто хочу чтобы работала нормальная задержка
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.