Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];

Вниз

Неизвестное програмное исключение 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.012 c
2-1135611497
kotbazilio
2005-12-26 18:38
2006.01.15
Удалить запись из таблицы


2-1135506553
Дмитрий_177
2005-12-25 13:29
2006.01.15
Удаление из списка строк


1-1134469050
Leonid
2005-12-13 13:17
2006.01.15
Редактирование отчёта в FastReport


2-1135686629
фома
2005-12-27 15:30
2006.01.15
канва


14-1134491996
Hermit
2005-12-13 19:39
2006.01.15
Прокси





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский