Мелочи жизни, разные ньюансы программ... |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Мелочи жизни, разные ньюансы программ... |
Alex7 |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 85 Пол: Мужской Репутация: 0 |
Вобщем решил создать темку, для решения, обсуждения всякких таких мелких ньюансов и деталей для создания различных прог.
|
Alex7 |
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 85 Пол: Мужской Репутация: 0 |
Ну, так как я еще не профи,так что первый вопросы и задам:
"Блокировка" 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 |
Сообщение
#3
|
Гость |
Alex7, ответы на все эти вопросы можно найти в поиске по форуму...
Цитата Обращение к секундомеру-часам. работай с MemL[$0040:$006c] и будет тебе счастье... Или 32-бита (там все нормально работает...) --------------- Цитата Как можно искуственно сделать два одновременно выполняющихся процеса? Переходи под 32-бита и используй TThread, или (если хочется поизвращаться для DOS) - обрабатывай прерывание таймера...--------------- Цитата Скрытие курсора. Здесь: Курсор --------------- Цитата Как обеспечить невидимость работы програмы(*.exe) А вирусы здесь не пишут... А кроме всего прочего, есть еще и CreateProcess... --------------- Цитата Перезапись защищенных файлов. Зависит от OC и того, какие, извините у тебя привилегии... --------------- Цитата Я слышал и, наверное, ощущал на практике, что эти операторы не поддерживают некоторых типов переменных Так "наверно" или ощущал? Если ты про невозможность работать с Real/Double/Extended в цикле For, то есть еще 2 вида циклов (While + Repeat ... Until), в который это прекрасно реализуется. Не надо изобретать велосипед... --------------- Цитата Можно ли как-то выразить одним словом(есть ли такое,или можно ли его задать?) все разделители(space,enter,tab) Можно, но для этого придется переписать функцию Pos... Несколько разделителей задается так: Const Delimiters = [#32, ',', '.', '!', '?']Пример использования - в FAQ-е "Строки" P.S. Внимательно прочти мою подпись и почаще пользуйся ссылками, которые в ней есть ... |
Atos |
Сообщение
#4
|
Прогрессор Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
Цитата Перезапись защищенных файлов. Если имеется в виду свойство файла "доступен только для чтения", то нужно изменить соответствующий атрибут, я об этом писал в комментариях к программе смСуществуют ведь файлы с разными видами доступа. Как програме дать права реврайтить любые файлы? Копирование файла |
Alex7 |
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 85 Пол: Мужской Репутация: 0 |
Цитата ответы на все эти вопросы можно найти в поиске по форуму... Да как и всегда, только когда они нужны уже, то никогда их не найдешь - закон подлости. Вот после нескольких неудачных попыток я и решил так спросить! Цитата работай с MemL[$0040:$006c] и будет тебе счастье... "два целочисельных типа, разделеные двоеточием определяют сегмент и смещение памяти" Это у меня в Хелпе так написано. Что бы это значило, и как именно подсчитать(в каких единицах), точное время, и что означает MemL[$0040:$006c] ?Цитата Или 32-бита (там все нормально работает...) Если ты про процесор, то у меня стоит 32. А в университете не знаю, но древнее - эт точно, вобщем факт - разница ощутима.Цитата Переходи под 32-бита и используй TThread, или (если хочется поизвращаться для DOS) - обрабатывай прерывание таймера... А можно об этом подробней рассказать, или послать туда, где мугу на доступном уровне это прочитать? а именно, что значит "TThread" и "обрабатывай прерывание таймера" ? Цитата Скрытие курсора работает, но так ка я только что стыкнулся впервые с процедурами, то сложновато понять ее работу( Цитата А вирусы здесь не пишут... А кроме всего прочего, есть еще и CreateProcess... Ты ж ведь тоже не вирусы пишешь(я так думаю ), но знаешь как! Что такое "CreateProcess" Ф-я?Цитата Зависит от OC и того, какие, извините у тебя привилегии... Я так понял, что вполне хватит сделать и того(SetFAttr(f,0);), что описано здесьЦитата Не надо изобретать велосипед... Понял! Просто мне нужно было убедится, что это так, а то не хочется кому-то говорить неточную информацию. Цитата Const Delimiters = [#32, ',', '.', '!', '?'] Цитата P.S. Внимательно прочти мою подпись и почаще пользуйся ссылками, которые в ней есть ... Как уже написал выше - стараюсь, но иногда таки приходится делать и так |
trminator |
Сообщение
#6
|
Четыре квадратика Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: 4 |
Цитата Может с 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);), что описано здесьЦитата Если ты про процесор, то у меня стоит 32. Еще надо 32-битный компилятор использовать для полного счастья. Turbo Pascal -- 16-битный, Free Pascal или Delphi -- 32-битные. Всякие прелести типа TThread -- из 32-битных.Цитата работай с MemL[$0040:$006c] и будет тебе счастье... Или опиши переменную примерно так:Код var time : longint absolute 0:$046C; В переменной time будет прибавляться единичка 18.5 раз в секунду. -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
Alex7 |
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 85 Пол: Мужской Репутация: 0 |
Цитата Еще в хелпе должно быть где-то написано, что шестнадцатиричные числа выглядят как раз примерно как $006C. A,B,C,D,E,F -- шестнадцатиричные "цифры" Ясно, тогда в каких это единицах написано? в милисекундах? можете параметры MemL объяснить?Цитата Или опиши переменную примерно так: И как мне это тогда использовать? Что мне даст что В переменной time будет прибавляться единичка 18.5 раз в секунду. ???? Код var time : longint absolute 0:$046C; В переменной time будет прибавляться единичка 18.5 раз в секунду.Цитата OlegZ имел ввиду совсем общий случай. Это под ДОС любой может сменить атрибуты у файла, а ежели ты под, извиняюсь, Unix пишешь... Под ХРЦитата Еще надо 32-битный компилятор использовать для полного счастья. Turbo Pascal -- 16-битный, Free Pascal или Delphi -- 32-битные. Всякие прелести типа TThread -- из 32-битных. Ну то хорошо, перейду я, а другие, если будут прогу юзать, то как будут? не буду ж я всем exe давать! |
volvo |
Сообщение
#8
|
Гость |
Цитата И как мне это тогда использовать? Что мне дасть что В переменной time будет прибавляться единичка 18.5 раз в секунду. ? Пишешь свою процедуру задержки (вместо Delay): пауза, пока содержимое Time не изменилось на достаточное количество единиц. Один простой While ...Цитата Под ХР Вот у тебя, например, админский аккаунт, а у меня - пользовательский... Все, что ты написал, и у тебя это отработало, можешь оставить себе - у меня просто может не хватить привилегий, чтобы прога запущенная с моего User-а меняла атрибуты, или что-то в этом роде...Цитата перейду я, а другие, если будут прогу юзать, то как будут? Ну, тогда напиши заново Windows и передавай в исходниках... Что ты хочешь, из 16-битного Паскаля работать с TThread? Не будет этого... |
Alex7 |
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 85 Пол: Мужской Репутация: 0 |
Цитата Пишешь свою процедуру задержки (вместо Delay): пауза, пока содержимое Time не изменилось на достаточное количество единиц. Один простой While ... Понимаешь, я просто не могу понять как именно она работает! Какие числа ставить внутри скобок, а какое за ними!??? Пож-сто примерчик! я не въезджаю! Цитата то ты хочешь, из 16-битного Паскаля работать с TThread? Не будет этого... Я просто хочу чтобы работала нормальная задержка |
Текстовая версия | 15.05.2024 12:04 |