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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Edd_K

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

Цитата:
Подскажите, пожалуйста, как присвоить переменной типа string содержимое текстового файла.

 
Если тебе удобно как раз на строки разбить, то как описано выше с TStringList. А если надо именно в ОДНУ строку, то тогда  
 

Код:
 
Var
  f: File;
  sz: Integer;
  s: AnsiString;
Begin
  AssignFile(f, 'sample.txt');
  Reset(f, 1);
  Try
    sz:= FileSize(f);
    SetLength(s, sz);
    BlockRead(f, s[1], sz);
  Finally
    CloseFile(f);
  End;
End;
 

 
З.Ы.:  
Прошу прощения, проглядел, что это уже было

Всего записей: 17 | Зарегистр. 26-04-2006 | Отправлено: 18:55 24-05-2006 | Исправлено: Edd_K, 18:59 24-05-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как можно сделать вот такое описание для своего сервиса:  

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 23:17 24-05-2006 | Исправлено: reenoip, 23:18 24-05-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reenoip
Я сделал так:
procedure TService1.ServiceAfterInstall(Sender: TService);
var rgstry: TRegIniFile; f_n: string;
begin
  rgstry:= TRegIniFile.Create;
  try
    rgstry.RootKey:= HKEY_LOCAL_MACHINE;
    if rgstry.OpenKey('SYSTEM\CurrentControlSet\Services',False) then begin
      if rgstry.ReadString(Self.Name,'Description','')='' then
        rgstry.WriteString(Self.Name,'Description','Бла-бла-бла - моё описание сервиса');
      rgstry.CloseKey;
    end;
  finally
    rgstry.Free;
  end;
end;

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 08:09 25-05-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reenoip
Описание задается через апишную функцию ChangeServiceConfig2. В делфях она нигде не вызывается, так что надо ручками в AfterInstall. Подробности использования в MSDN
 
Butcher
Можно и так, только вместо  
  Self.Name, ...
болеее правильно  
  Sender.Name

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 08:16 25-05-2006 | Исправлено: RomanTim, 10:31 25-05-2006
ErgoB

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу прощения за возможно дилетантский вопрос.
В программе потребовалось отработать некоторые операции по try except.
После написания все вылетает по тем же ошибкам которые и пытается отработать оператор.
Пытался найти ошибки - не нашел. Тупо скопирал обычный пример использования try except из хелпа - тоже не пашет. Смотрел в инете примеры использования, качал, запускал - не пашет. SysUtils подключен. Delphi 7. Если возможно подскажите как бороться.
С уважением ErgoB.

Всего записей: 5 | Зарегистр. 25-05-2006 | Отправлено: 12:15 25-05-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ErgoB
Если вылетает только при запуске из-под IDE, то зайди "Tools"-"Debugger Options"-"Language Exceptions" и сними птицу "Stop on Delphi Exceptions"
Если не только, то код в студию!

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 12:22 25-05-2006
Edd_K

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ErgoB
"Много слов - мало смысла" (с)  
 
Приведи если не трудно кусок кода и напиши, как должно фунциклировать, а как на самом деле ведет себя - тогда все станет ясно

Всего записей: 17 | Зарегистр. 26-04-2006 | Отправлено: 12:23 25-05-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
RomanTim
Дело в том, что если метод TService1.ServiceAfterInstall(Sender: TService) обрабатывает события только своего класса, то Sender.Name будет по-любому равен Self.Name. А в общем случае, конечно, я немного протупил.

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 12:27 25-05-2006
ErgoB

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пример списал с учебника какого-то.
Простенький код про деление на нуль.
Сделал в Tools как сказали - не помогает.
 
 
procedure TfmF1.Button1Click(Sender: TObject);
  var x,y : integer;
      z : real;
  begin
    x:=10;
    y:=0;
    try
      z:=x/y;
      fmF1.Memo1.Lines.Add(FloatToStr(z));
    except
      on EZeroDivide do
        begin
          MessageDLG('Деление на нуль',mtError,[mbOk],0);
          z:=0;
          fmF1.Memo1.Lines.Add(FloatToStr(z));
        end;
    end;
  end;
 
 

Всего записей: 5 | Зарегистр. 25-05-2006 | Отправлено: 12:34 25-05-2006
Edd_K

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ErgoB
А что собственно не помогает?
у тебя в блоке Except перехватывается обработка ошибки EZeroDivide. Если бы ты ее не перехватывал, то уже на самом верхнем уровне Дельфи сама выдала бы ошибку путем вызова Application.HandleException и ты бы увидел дельфийное сообщение об ошибке. В твоем же примере обработка происходит самостоятельно, при этом тоже выдается сообщение об ошибке, но в результат Z заносится 0. Кстати, код написан не оптимально. Достаточно было бы так:
 

Код:
 
Procedure TfmF1.Button1Click(Sender: TObject);  
Var  
  x, y: Integer;  
  z: Real;        
Begin  
  x:= 10;  
  y:= 0;  
  Try  
    z:= x / y;  
  Except
    z:= 0;  
    Application.HandleException(Self);  // зачем обрабатывать ошибку самостоятельно?
  End;  
  fmF1.Memo1.Lines.Add(FloatToStr(z));  
End;
 

 
 
А теперь собственно вопрос.
Что значит "все вылетает по тем же ошибкам которые и пытается отработать оператор". Т.е. у тебя после сообщения об ошибке и нажатия Ok в fmF1.Memo1 не появлеется нуль и работа программы не продолжается что ли?

Всего записей: 17 | Зарегистр. 26-04-2006 | Отправлено: 13:01 25-05-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Edd_K
>зачем обрабатывать ошибку самостоятельно?
Наверное, хотя бы для того, чтобы сообщение выдавалось по-русски.

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 13:10 25-05-2006
ErgoB

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

Цитата:
Кстати, код написан не оптимально

Не ко мне претензии

Цитата:
не появлеется нуль и работа программы не продолжается что ли?  

Да
Попробовал твой код - все равно да.
В общем понимаю абсурдность ситуации и сам, а вот что делать не знаю.

Всего записей: 5 | Зарегистр. 25-05-2006 | Отправлено: 13:12 25-05-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ErgoB
1)
Цитата:
"Tools"-"Debugger Options"-"Language Exceptions" и сними птицу "Stop on Delphi Exceptions"  
что там - CheckBox установлен?
2) откомпилируй, выйди из Delphi, запусти свой EXE-шник... Он себя ведёт как надо???
тогда точно - у тебя установлена опция остановки на Exception'ах

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 13:34 25-05-2006
Pentium133



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Напиши вместо  
Application.HandleException(Self) - это ShowMessage("Все работает как надо. Это я тормозил");
и проверь

Всего записей: 126 | Зарегистр. 21-09-2004 | Отправлено: 13:51 25-05-2006 | Исправлено: Pentium133, 13:52 25-05-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pentium133
С Application.HandleException(Self) тоже работает, я специально проверил.

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 14:06 25-05-2006
ErgoB

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

Цитата:
ErgoB
1)
Цитата:
"Tools"-"Debugger Options"-"Language Exceptions" и сними птицу "Stop on Delphi Exceptions"  
что там - CheckBox установлен?
2) откомпилируй, выйди из Delphi, запусти свой EXE-шник... Он себя ведёт как надо???
тогда точно - у тебя установлена опция остановки на Exception'ах  

 
Уже проверяли. Ошибки вылазят и в откомпилятой программе и в оболочке, при любых установках "Stop on Delphi Exceptions" и при вклю
ченных и при выключенных.

Всего записей: 5 | Зарегистр. 25-05-2006 | Отправлено: 14:20 25-05-2006
Pentium133



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Butcher
Смысл в том что он выдает туже ошибку и разницы не заметно. А так хоть заметно что исключение перехваченно и обработанно
 
Добавлено:
а вообще тот код под средой должен два раза сообщать об исключении (если та опция установленна)

Всего записей: 126 | Зарегистр. 21-09-2004 | Отправлено: 14:30 25-05-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Pentium133
так в Memo1 ноль должен добавляться при перехвате.
Вообще, в чем-то затык у автора - чудес же не бывает.

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 14:37 25-05-2006
Pentium133



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наверно после исключения, перехваченного средой, останавливает прогу и ждет тех самых чедес....

Всего записей: 126 | Зарегистр. 21-09-2004 | Отправлено: 14:54 25-05-2006
Edd_K

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

Цитата:
Наверно после исключения, перехваченного средой, останавливает прогу и ждет тех самых чедес....

 
Если в блоке Exception не вызывается повторно Raise, то исключение подавлено! Учите матчасть. И если не выдавать никаких сообщений (типа  Application.HandleException), то сообщений об ошибке не будет ВОВСЕ!
 
Например, код  
 

Код:
 
x:= 10;  
  y:= 0;  
  Try  
    z:= x / y;  
  Except  
    z:= 0;  
  End;  
  fmF1.Memo1.Lines.Add(FloatToStr(z));  
 

 
В Memo добавится ноль безо всяких ошибок в случае запуска не из-под Дельфи. И будет ошибка на уровне дебагера, если запускать из-под Дельфи
 
Тут не может быть вариантов - так работает механизм обработки исключений.
А вот в таком виде:
 

Код:
 
x:= 10;  
  y:= 0;  
  Try  
    z:= x / y;  
  Except  
    z:= 0;  
    Raise;
  End;  
  fmF1.Memo1.Lines.Add(FloatToStr(z));  
 

 
последняя строка не отработает, потому что перехватив ошибку и присвоив z:=0 ты снова перевозбуждаешь ее.
 
 
ErgoB
Ты лучше скажи, что еще за ошибка возникает кроме деления на ноль? ТОЛЬКО при запуске НЕ ИЗ-ПОД ДЕЛЬФИ.  
Т.е. приведи текст "лишней" ошибки.

Всего записей: 17 | Зарегистр. 26-04-2006 | Отправлено: 16:13 25-05-2006 | Исправлено: Edd_K, 16:15 25-05-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