Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi 2

Автор: Edd_K
Дата сообщения: 24.05.2006 17:55
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;
Автор: reenoip
Дата сообщения: 24.05.2006 22:17
Подскажите, пожалуйста, как можно сделать вот такое описание для своего сервиса:
Автор: Butcher
Дата сообщения: 25.05.2006 07:09
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;
Автор: RomanTim
Дата сообщения: 25.05.2006 07:16
reenoip
Описание задается через апишную функцию ChangeServiceConfig2. В делфях она нигде не вызывается, так что надо ручками в AfterInstall. Подробности использования в MSDN

Butcher
Можно и так, только вместо
Self.Name, ...
болеее правильно
Sender.Name
Автор: ErgoB
Дата сообщения: 25.05.2006 11:15
Прошу прощения за возможно дилетантский вопрос.
В программе потребовалось отработать некоторые операции по try except.
После написания все вылетает по тем же ошибкам которые и пытается отработать оператор.
Пытался найти ошибки - не нашел. Тупо скопирал обычный пример использования try except из хелпа - тоже не пашет. Смотрел в инете примеры использования, качал, запускал - не пашет. SysUtils подключен. Delphi 7. Если возможно подскажите как бороться.
С уважением ErgoB.
Автор: Butcher
Дата сообщения: 25.05.2006 11:22
ErgoB
Если вылетает только при запуске из-под IDE, то зайди "Tools"-"Debugger Options"-"Language Exceptions" и сними птицу "Stop on Delphi Exceptions"
Если не только, то код в студию!
Автор: Edd_K
Дата сообщения: 25.05.2006 11:23
ErgoB
"Много слов - мало смысла" (с)

Приведи если не трудно кусок кода и напиши, как должно фунциклировать, а как на самом деле ведет себя - тогда все станет ясно
Автор: Butcher
Дата сообщения: 25.05.2006 11:27
RomanTim
Дело в том, что если метод TService1.ServiceAfterInstall(Sender: TService) обрабатывает события только своего класса, то Sender.Name будет по-любому равен Self.Name. А в общем случае, конечно, я немного протупил.
Автор: ErgoB
Дата сообщения: 25.05.2006 11:34
Пример списал с учебника какого-то.
Простенький код про деление на нуль.
Сделал в 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;


Автор: Edd_K
Дата сообщения: 25.05.2006 12:01
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;
Автор: Butcher
Дата сообщения: 25.05.2006 12:10
Edd_K
>зачем обрабатывать ошибку самостоятельно?
Наверное, хотя бы для того, чтобы сообщение выдавалось по-русски.
Автор: ErgoB
Дата сообщения: 25.05.2006 12:12

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

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

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

Да
Попробовал твой код - все равно да.
В общем понимаю абсурдность ситуации и сам, а вот что делать не знаю.
Автор: SERGE_BLIZNUK
Дата сообщения: 25.05.2006 12:34
ErgoB
1)
Цитата:
"Tools"-"Debugger Options"-"Language Exceptions" и сними птицу "Stop on Delphi Exceptions"
что там - CheckBox установлен?
2) откомпилируй, выйди из Delphi, запусти свой EXE-шник... Он себя ведёт как надо???
тогда точно - у тебя установлена опция остановки на Exception'ах
Автор: Pentium133
Дата сообщения: 25.05.2006 12:51
Напиши вместо
Application.HandleException(Self) - это ShowMessage("Все работает как надо. Это я тормозил");
и проверь
Автор: Butcher
Дата сообщения: 25.05.2006 13:06
Pentium133
С Application.HandleException(Self) тоже работает, я специально проверил.
Автор: ErgoB
Дата сообщения: 25.05.2006 13:20
SERGE_BLIZNUK

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


Уже проверяли. Ошибки вылазят и в откомпилятой программе и в оболочке, при любых установках "Stop on Delphi Exceptions" и при вклю
ченных и при выключенных.
Автор: Pentium133
Дата сообщения: 25.05.2006 13:30
Butcher
Смысл в том что он выдает туже ошибку и разницы не заметно. А так хоть заметно что исключение перехваченно и обработанно

Добавлено:
а вообще тот код под средой должен два раза сообщать об исключении (если та опция установленна)
Автор: Butcher
Дата сообщения: 25.05.2006 13:37
Pentium133
так в Memo1 ноль должен добавляться при перехвате.
Вообще, в чем-то затык у автора - чудес же не бывает.
Автор: Pentium133
Дата сообщения: 25.05.2006 13:54
Наверно после исключения, перехваченного средой, останавливает прогу и ждет тех самых чедес....
Автор: Edd_K
Дата сообщения: 25.05.2006 15:13
Pentium133

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


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

Например, код


Код:
x:= 10;
y:= 0;
Try
z:= x / y;
Except
z:= 0;
End;
fmF1.Memo1.Lines.Add(FloatToStr(z));
Автор: Pentium133
Дата сообщения: 25.05.2006 16:12
Edd_K

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


Да я собственно и не спорю об этом...
Автор: alexist
Дата сообщения: 26.05.2006 10:19
Никто не знаета, решена ли проблема слета вызова HELP по F1 в IDE BDS2006 после установки Update2 ?
Автор: OdesitVadim
Дата сообщения: 26.05.2006 11:42
alexist
А вроде не было проблемы. А VS2005 или .NET FW2 не устанавливали попутно?
Автор: dyr farot
Дата сообщения: 26.05.2006 11:49
стоит BDS со вторым паком. никаких проблем не заметно...
Автор: alexist
Дата сообщения: 26.05.2006 11:50
Нет, не ставил. Так она вроде бы не только у меня.
Полсе Update2 при нажатии F1 на каком-либо компоненте (или в редактиоре на названии какой либо функции) теперь хелп не открывается.
Автор: OdesitVadim
Дата сообщения: 26.05.2006 13:02
Не открываеться или при этом ещё и ругается как то? Это две совершенно разные вещи.
Посмотри пожалуйста значение следующих ключиков реестра
HKEY_CLASSES_ROOT\AppID\dexplore.exe
может быть
{4A79114D-19E4-11d3-B86B-00C04F79F802} или
{E722CD58-9D56-4A4B-9395-8456FE843B71}
А также в
HKEY_CURRENT_USER\Software\Borland\BDS\4.0 может появиться ключ DisablePackage (или очень похоже) а там bpl, которая отвечает за хелп
Автор: alexist
Дата сообщения: 26.05.2006 14:11
В HKEY_CLASSES_ROOT\AppID\dexplore.exe стоит {4A79114D-19E4-11d3-B86B-00C04F79F802}

В HKEY_CURRENT_USER\Software\Borland\BDS\4.0\DisablePackage стоят ряд BPL сторонних производителей (JVCL и DevExpress)
Автор: reenoip
Дата сообщения: 26.05.2006 14:49
Сворачиваю все открытые окна командой "SendMessage(FindWindow('Shell_TrayWnd',nil),wm_command,$019f,0);". А каким образом мне их можно восстановить?
Автор: OdesitVadim
Дата сообщения: 26.05.2006 15:14
alexist
Попробуй в В HKEY_CLASSES_ROOT\AppID\dexplore.exe записать {E722CD58-9D56-4A4B-9395-8456FE843B71} и перезапустить дефу. Если ругнётся при старте на пакет с именем htmlhelp*.bpl, то не в коем случае не блокируй его.
Если не ругнётся - пробуй запускать хелп.
Автор: ExExibit
Дата сообщения: 26.05.2006 15:20
Народ!Есть длинная сторока русского текста.Как выполнить перенос по словам и отобразить результат переноса в Label?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.