Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Неизвестное програмное исключение OS !!!   Найти похожие ветки 

 
Святослав   (2005-11-05 11:14) [0]

Здравствуйте уважаемые мастера !!!
У меня появилась проблема которую я немогу решить уже несколько дней! да и понять почему она появляеться ! При этом компилятор не "ругаеться" ! :(
В главном модуле я работаю с регистром !  Все нормально !! Но как только я добавляю процедуру из модуля ShellAPI , при этом опять таки же Компилятор не "ругаеться" :( но как только пытаюсь запустить программу - Бах ошибка -
"Неизвестное програмное исключение ... RTL90.BPL ... OS Function Failed !" ... !!!!

вод исходник главного модуля:
program programm;

uses
 Forms, SysUtils, Dialogs, Registry,
 mainform in "mainform.pas" {mainform1};

{$R *.res}

// процедура простого симетричного шифрования текста по паролю
procedure SimetricCoding(var text: string; password: string;
decode: boolean);
var
i, PasswordLength: integer;
sign: shortint;
begin
PasswordLength := length(password);
if PasswordLength = 0 then
  Exit;
if decode then
  sign := -1
else
  sign := 1;
for i := 1 to Length(text) do
  text[i] := chr(ord(text[i]) + sign *
    ord(password[i mod PasswordLength + 1]));
end; //Конец процедуры

var LastDate, NowDate: TDateTime;
   LimitString: String;
   LimitInteger: Integer;
   RegFile: TRegIniFile;

begin
RegFile:=TRegIniFile.Create("{02D4B3F1-FD88-11D1-960D-00805FC79235}");
NowDate:=Date;
LastDate:=RegFile.ReadDate("{AEF2255D-9EA0-4971-8777-603DE5B65BDF}");
if NowDate<LastDate then
 begin
 showmessage("Системные часы настроены неправильно !");
 halt;
 end;
if NowDate>LastDate then
 begin
 LimitString:=RegFile.ReadString("","{AEF2255D-9EA0-4971-8777-00805FC75BDF}",LimitString);
 SimetricCoding(Limitstring,"k4e5X8y8u0n6>5a1q9.7t5t7",true);
 LimitInteger:=strtoint(LimitString);
 LimitString:=inttostr(LimitInteger-1);
 SimetricCoding(LimitString,"k4e5X8y8u0n6>5a1q9.7t5t7",false);
 RegFile.WriteDate("{AEF2255D-9EA0-4971-8777-603DE5B65BDF}",NowDate);
 RegFile.WriteString("","{AEF2255D-9EA0-4971-8777-00805FC75BDF}",LimitString);
 RegFile.Free;
 end;

 Application.Initialize;
 Application.CreateForm(Tmainform1, mainform1);
 // EOSError - OS Function Failed (RTL90.bpl)
 Application.Run;
end.
-----------------------------
а вот исходник главной формы:
unit mainform;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, SHellAPI, Menus;

type
 Tmainform1 = class(TForm)
   TrayMenu: TPopupMenu;
   procedure FormDestroy(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   FIconData:TNotifyIconData;
 public
   procedure WndProc(Var Msg: TMessage); override;
 end;

var
 mainform1: Tmainform1;

implementation

{$R *.dfm}

//Ошибка происходит как только дописую эту процедуру
//без нее все нормально ! :(
Procedure Tmainform1.WndProc(Var Msg:TMessage);
Var P:TPoint;
Begin
If Msg.Msg=WM_USER+1
then Case Msg.lParam of
 WM_LbuttonDblClk:
  begin

  end;
 WM_RBUTTONDOWN:
  begin
  SetForegroundWindow(Handle);
  GetCursorPos(P);
  TrayMenu.Popup(P.X,P.Y);
  PostMessage(Handle,WM_NULL,0,0);
  End;
end;
End;

procedure Tmainform1.FormCreate(Sender: TObject);
begin
With FIconData do
begin
cbSize:=SizeOf(FIconData);
Wnd:=Handle;
uID:=100;
uFlags:=NIF_MESSAGE+NIF_ICON+NIF_TIP;
uCallbackMessage:=WM_USER+1;
hIcon:=Application.Icon.Handle;
StrPCopy(szTip,Application.Title)
end;
Shell_NotifyIcon(NIM_ADD,@FIconData);
end;

procedure Tmainform1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@FIconData);
end;

end.
--------
помогите пожалуйста !!  ненаю что делать :(
компилятор у меня 2005 Architect !
если надо то пришлю на мыло исходник в архиве !
Заранее очень благодарен !!!


 
gdaujk ©   (2005-11-05 13:27) [1]

работаю с регистром

Ну, правильнее, наверное, с реестром...

Procedure Tmainform1.WndProc(Var Msg:TMessage);

Ну ты приколол :-) Тебе чего надо-то: делать что-то при пориходе сообщений. Если так, то, например, для WM_USER+1 сделай:

type
 TForm1 = class(TForm)
   ...
 private
   procedure OnSysTrayMes(var message: TMessage); message WM_USER+1;
   ...
 end;

implementation

procedure TForm1.OnSysTrayMes(var message: TMessage);
begin
 case message.lParam of
   WM_LBUTTONDBLCLK:
     begin
       ...
     end;
     
   WM_RBUTTONDOWN:
     begin
       ...
     end;
 end;
end;

...
end.


 
Anatoly Podgoretsky ©   (2005-11-05 13:39) [2]

Какой то компонент от Дельфи 9


 
Zeqfreed ©   (2005-11-05 15:02) [3]

Святослав   (05.11.05 11:14)

В WndProc inherited первой строкой, можно не первой.

gdaujk ©   (05.11.05 13:27) [1]

> Ну ты приколол :-)

Чем он тебя приколол?


 
gdaujk ©   (2005-11-05 15:59) [4]

Ну ты приколол :-)
Приношу свои изинения Автору. Просто по-началу немного не понял его...

>Zeqfreed ©   (05.11.05 15:02) [3]
В WndProc inherited первой строкой, можно не первой.

Согласен, это проблемму автора решает. Только вопрос: в чём приемущества способа обработки сообщений, предагаемого автором, по сравнению с gdaujk ©   (05.11.05 13:27) [1]? Есть ли они вообще?


 
Zeqfreed ©   (2005-11-05 17:17) [5]

gdaujk ©   (05.11.05 15:59) [4]
Предложенным тобой способом можно обрабатывать только заранее известные константные сообщения.


 
gdaujk ©   (2005-11-05 20:01) [6]

>Zeqfreed ©   (05.11.05 17:17) [5]
А WM_USER+1 - это заранее известное константное сообщение? Не приходит что-то на ум заранее неизвестное вариантное сообщение :-( Подскажите, а то так и помру дураком.


 
YuRock ©   (2005-11-06 04:36) [7]

> Подскажите, а то так и помру дураком

Пример использования заранее неизвестных ( не "константных" сообщений ):

procedure Tmainform1.WndProc(Var Msg:TMessage);
const
 WM_MY_FIRST = WM_USER + 100;
 WM_MY_LAST = WM_USER + 200;
begin
 if ( Msg.Msg >= WM_MY_FIRST ) and ( Msg.Msg <= WM_MY_LAST ) then begin
   // какой-то код
 end else
   inherited;
end;


 
gdaujk ©   (2005-11-06 05:03) [8]

YuRock ©   (06.11.05 04:36) [7]
Спасибо за ответ. Только для чего это можно использовать? Только что для блокировки обработки сообщений WM_MY_FIRST <= Mes <= WM_MY_LAST...


 
YuRock ©   (2005-11-06 05:10) [9]

Мало ли для чего? Например, можно при WM_KEYUP и WM_LBUTTONUP что-то одно и то же делать.

Ладно, это уже флуд пошел. Извините, админы :)


 
Zeqfreed ©   (2005-11-06 09:53) [10]

gdaujk ©   (05.11.05 20:01) [6]
Бывают такие случаи когда, например, требуется динамически создавать новые сообщения или использование константных значений не желательно; тогда регистрируется новое сообщение в системе (см. RegisterWindowMessage) и затем оно обрабатывается в оконой ф-ции.

Назвать случай когда нельзя обойтись константными значениями я, пожалуй, затрудняюсь, возможно он и существует.


 
gdaujk ©   (2005-11-06 10:37) [11]

>YuRock ©   (06.11.05 05:10) [9]
...можно при WM_KEYUP и WM_LBUTTONUP что-то одно и то же делать.

WM_KEYUP и WM_LBUTTONUP - заранее известные константные сообщения :-)

Ладно, это уже флуд пошел.

Вот с этим полностью согласен :-))) Дискуссия не в тему...


 
Святослав   (2005-11-06 12:28) [12]

С уважением ! Благодарю за вашу помощь !!!   :)



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
2-1135447402
Arazel
2005-12-24 21:03
2006.01.15
UnicodeToASCII Помогите найти ф-цию?


14-1135264894
Lexer
2005-12-22 18:21
2006.01.15
Нужен сценарий или песня к Новому году


2-1135264803
з. танька
2005-12-22 18:20
2006.01.15
узнать кто куда лазил


2-1135324126
oleggar
2005-12-23 10:48
2006.01.15
файл в тело Exe


6-1127837051
maVladimir
2005-09-27 20:04
2006.01.15
Многопоточная закачка файлов