Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2

Модерирует : ShIvADeSt

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
goodwen
если ты вообще не знаешь где находится будет папка, то без диалога выбора никак, а сли у тебя только будет меняться путь самой проги, но папка будет лежать в корне программы, например, \Wave\Sound1.wav,  то делай так

Код:
 
PlaySound  (ExtractFilePath(paramstr(0))+'Wave\intro.wav',0,SYNC);  

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 16:38 08-10-2006 | Исправлено: DroN_S, 16:52 08-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С определением "онлайности" разобрался. А теперь хочу написать что-то вроде цикла, но который бы не негрузил процессор и несколько часов работал в фоне, проверяя, скажем, раз в минуту состояние переменной.

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 16:44 08-10-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar
зачем цикл, используй системный таймер...
 
Добавлено:

Цитата:
Если для консольной, то в uses просто меняешь KOL на sysutils, а в самом коде все Pcontrol на string

похоже не только это....
не компилируется, очень на много ругается...

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 16:51 08-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DroN_S, по памяти не помню. Но убери filesize из условия, а все OutServAns.add меняй на OutServAns := ... Да, и в процедурах в параметрах везде где OutServAns пиши ... var OutServAns: string ...  Если еще будет ругаться, скажешь хде (делфи нет под рукой)

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 18:58 08-10-2006
goodwen



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DroN_S  
 
"сли у тебя только будет меняться путь самой проги, но папка будет лежать в корне программы" Да именно так. Спасибо пример  работает единственное PlaySound требует АнсиЧар поэтому приходится приводить типы.  
PathWave:=PAnsiChar(ExtractFileDir(ParamStr(0)) +'\Wave\intro.wav');
PlaySound(PathWave,0,SND_ASYNC);
 
 
И все же 2 строчки кода неужели мне приснилось про «…\\Wave\intro.wav» и прощи никак нельзя ?

Всего записей: 243 | Зарегистр. 09-04-2006 | Отправлено: 19:18 08-10-2006 | Исправлено: goodwen, 19:18 08-10-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
PlaySound(PChar(ExtractFileDir(ParamStr(0)) +'Wave\intro.wav'),0,SND_ASYNC)  

в одну строку
куда ещё то проще?

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 19:51 08-10-2006 | Исправлено: DroN_S, 19:53 08-10-2006
goodwen



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ну да) туплю

Всего записей: 243 | Зарегистр. 09-04-2006 | Отправлено: 20:07 08-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся с такой проблемой: как проверить имя файла на допустимость (Например Check('FILE*.TXT') = false, Check('FILE8.TXT') = true). Может в каком то модуле есть что-то подобное?

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 07:16 09-10-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar

Код:
 
  if FileExists('Text.txt') then
//делаешь что нужно
    else
      begin
       if Application.MessageBox('файл не найден!','Ошибка!!!',
          MB_OK + MB_ICONERROR) = IDOK then halt;
      end;
 

не подходит????

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 07:33 09-10-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DroN_S
Вобще эта функция проверяет наличие файла физически,  
а Jokerjar вроде как нужно проверить валидность имени файла нового не обязяательно существующего. Я лично вытягивал функцию проверки из компонентов Raize.

Всего записей: 559 | Зарегистр. 05-04-2006 | Отправлено: 10:10 09-10-2006
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вроде как нужно проверить валидность имени файла нового не обязяательно существующего

тогда делать сканирование директории где находятся файлы и проверять наименования..

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 10:54 09-10-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar
Вот такая функция проверяет полное имя файла на валидность. Можно дополнить чтобы поставляла сама расширение default-ное.
Подробнее...
Вот видоизменил в фоответствии с твоими требованиями.
Мне кажется она немного бістрее будет работать чем каждый раз перебирать Pos.

Всего записей: 559 | Зарегистр. 05-04-2006 | Отправлено: 11:20 09-10-2006 | Исправлено: RedPromo, 12:02 09-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedPromo, спасибо. Мне надо проверять имя без пути к нему. Вроде удовлетворился этим:
 
function Nname(s: string): boolean;
begin
result := (pos('\',s)=0)and(pos('/',s)=0)and(pos(':',s)=0)and
(pos('*',s)=0)and(pos('?',s)=0)and(pos('"',s)=0)and
(pos('<',s)=0)and(pos('>',s)=0)and(pos('|',s)=0);
end;

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 11:49 09-10-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто подсказать у меня с какогото момента в проекте BDS2006 начинает при авто созданиии функции например ButtonDown после begin лепить inherited самое главное там где это совсем не в тему и в тему.

Всего записей: 559 | Зарегистр. 05-04-2006 | Отправлено: 12:07 09-10-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если есть override - тогда так и должно быть. Но может какой-то эксперт балуется

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 12:13 09-10-2006
RedPromo



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Нет override нет он ставит inherited даже на нажатие кнопки. Мне кажется єто потому как у меня переопределен родитель формы TForms. Вот он и балуется.

Всего записей: 559 | Зарегистр. 05-04-2006 | Отправлено: 12:32 09-10-2006
Saxonika



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо всем кто откликнулся на мой вопрос.
Всё заработало.
 
Особое спасибо RostY
 
Почему-то мне казалось что рекомендации по поводу WaitForSingleObject не могут вызывать сомнений. Оказалось, что именно в нём и вся загвоздка!!!
 
Как только я вызов  WaitForSingleObject поменял на циклирование - всё стало как шёлкоевое. Я так и не понял почему. Вероятно WaitForSingleObject что-то такое ещё специфическое делает. Но что? Именно из-за него дочерний процесс чувствует родительский...  
 
Правда при вызове  WaitForSingleObject программа как бы замораживалась и пока не вернётся управление просто простаивала (проц не грузила), а теперь оно циклится и грузит проц
 
Как бы от этого избавиться ?

Всего записей: 345 | Зарегистр. 26-04-2006 | Отправлено: 00:57 10-10-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Saxonika

Цитата:
Правда при вызове  WaitForSingleObject программа как бы замораживалась и пока не вернётся управление просто простаивала (проц не грузила), а теперь оно циклится и грузит проц  
Как бы от этого избавиться ?

Делай проверку не в цикле а по таймеру - период можешь подобрать под себя в зависимости от среднего времени выполнения проги

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 08:11 10-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Делай проверку не в цикле а по таймеру

 
Если без компонентов пишешь, попробуй типо так :
 
program testtimer;
 
uses Windows,Messages;
 
var
  WinClass:TWndClassA;
  Handle,Label1,Timer1:Integer;
  Msg:TMsg;
  t:integer;
 
procedure timer_do;
var s:string;
begin
inc(t);
str(t,s);
SetWindowText(Label1,Pchar(s));
end;
 
function WindowProc(hWnd,uMsg,wParam,lParam:Integer):Integer; stdcall;
begin
if uMsg = WM_DESTROY then begin
 KillTimer(Handle,Timer1);
 halt;
end;
Result:=DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
 
begin
 with WinClass do begin
  style         := CS_CLASSDC or CS_PARENTDC;
  lpfnWndProc   := @WindowProc;
  hInstance     := hInstance;
  hbrBackground := color_btnface + 1;
  lpszClassname := 'test_timer';
  hCursor       := LoadCursor(0, IDC_ARROW);
 end;
RegisterClass(WinClass);
Handle:=CreateWindowEx(WS_EX_WINDOWEDGE, 'test_timer', 'test timer',
                       WS_VISIBLE or WS_SIZEBOX or WS_CAPTION or WS_SYSMENU,
                       363, 278, 305, 65, 0, 0, hInstance, nil);
Label1:=Createwindow('Static', '', WS_VISIBLE or WS_CHILD or SS_CENTER,
                     8, 12, 76, 13, Handle, 0, hInstance, nil);
 
Timer1:=SetTimer(Handle,0,1000,@timer_do);
SetWindowText(Label1,'0');
 
while(GetMessage(Msg,Handle,0,0)) do begin
 TranslateMessage(msg);
 DispatchMessage(msg);
end;
 
end.

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 09:30 10-10-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Saxonika
по таймеру, наверно, лучше всего будет, но если тебе нужен цикл сделай в цикле что-то типа
 
while ....
do
  sleep(500);
  ...
  ...
  Application.ProcessMessages;
end; //while

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 09:34 10-10-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru