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

Вниз

Логин на сайт статистики   Найти похожие ветки 

 
{RASkov} ©   (2007-08-13 18:20) [0]

Project Project1.exe raised exception class EIdWS2StubError with message "Error on call Winsock2 library function shutdown: Или приложение не вызвало WSAStartup, или произошла ошибка в WSAStartup". Process stopped. Use Step or Run to continue.

Вот такая штука вылазит. Из за чего это может быть или что бы такое сделать, чтоб ее не было?

Вылазеет только если при старте программы в окне авторизации с не верным(специально так для проверки) адресом LoginData.SUrl выполнить код где есть
try
 FLoginData.SFirstPage:=DtMdl.IdHTTP.Post(LoginData.SUrl, LoginInfo);
except
 ShowMessage("Возможно в адресе ошибка"#13#10"Не найден путь: "+LoginData.SUrl);
 Result:=False;
end;
Сообщение показывается ... жмем ок и жмем отмена в моем окне авторизации и тут эта ошибка.
Но если при старте пройти эту авторизацию, т.е. залогинится, и в работе программы вызвать "переавторизацию", и провести такую же штуку то все нормально и никаких ошибок.

Разница при нажатии Отмена:
Если при старте - то приложение завершается
ДПР
program Project1;
uses Forms,
    UFaseStat in "UFaseStat.pas" {FFaseStat},
    UAutorize in "UAutorize.pas" {FrmAutorize},
    UDtMdl in "UDtMdl.pas" {DtMdl: TDataModule};
{$R *.res}
begin
 Application.Initialize;
 Application.CreateForm(TDtMdl, DtMdl);
 if LoginInHost(True) then begin
  Application.CreateForm(TFFaseStat, FFaseStat);
  Application.Run;
 end;
end.
Если во время работы то просто закрывается(уничтожается окно авторизации)...
Если еще какой код нужно то скажите, что показать....
Я с программированием для интернет вообще не знаком.... :( Может нужно этому IdHTTP что-нибудь сказать, типа закрыть соеденение впрочем я его(соеденение) вручки не делал кроме IdHTTP.Post и это единственное что я вызываю у IdHTTP...


 
{RASkov} ©   (2007-08-13 18:22) [1]

Во время работы - "перелогинивание" так:
if LoginInHost(False) then LoadPersonalAccount;


 
umbra ©   (2007-08-13 18:42) [2]

так а где IdHTTP живет? и что это за LoginInHost(True)?


 
{RASkov} ©   (2007-08-13 18:56) [3]

> [2] umbra ©   (13.08.07 18:42)
> так а где IdHTTP живет?

На(в) DtMdl


> [2] umbra ©   (13.08.07 18:42)
> и что это за LoginInHost(True)?

Функция "залогинивания"
function LoginInHost(AFirstLogin: Boolean): Boolean;
var FlName: String;
procedure ShowLoginForm(FRemember: Boolean);
Label SF;
begin
 with TFrmAutorize.Create(nil) do try
  edUrlExit(ActiveControl);
SF:if FRemember then begin
   edUrl.Text:=        LoginData.SUrl;
   edName.Text:=       LoginData.SName;
   edPass.Text:=       LoginData.SPass;
   cbRemember.Checked:=LoginData.Remember;
   cbNotAsk.Checked:=  LoginData.NotAsk;
  end;
  if ShowModal=mrOk then begin
   Result:=Login;
   if not Result then goto SF else SaveLoginData;
  end else Result:=False;
 finally Free; end;
end;
begin
 FlName:=ExtractFilePath(Application.ExeName)+LOGINFILENAME;
 Result:=FileExists(FlName);
 if Result and AFirstLogin then begin
  LoadLoginData(FlName);
  if LoginData.NotAsk then Result:=Login else ShowLoginForm(LoginData.Remember);
 end else ShowLoginForm(not AFirstLogin);
end;


 
{RASkov} ©   (2007-08-13 18:59) [4]

> Result:=Login;

Login:

function Login: Boolean;
function ValidUrl: Boolean;
var N: Integer;
begin
  Result:=False;
  if PosEx("http://", LoginData.SUrl, 2)>1 then Exit;
  N:=Pos("http://", LoginData.SUrl);
  if N<1 then FLoginData.SUrl:="http://"+FLoginData.SUrl;
  if LoginData.SUrl[Length(LoginData.SUrl)]<>"/" then FLoginData.SUrl:=FLoginData.SUrl+"/";
  Result:=True;
end;
var LoginInfo: TStrings;
begin
 LoginInfo := TStringList.Create;
 Screen.Cursor:=crHourGlass;
 Result:=False;
 if not ValidUrl then begin
  ShowMessage("Не верный адрес!"); Exit;
 end;
 try
  LoginInfo.Clear;
  LoginInfo.Add("UserName="+LoginData.SName);
  LoginInfo.Add("Password="+LoginData.SPass);
  with DtMdl do try
   try
    FLoginData.SFirstPage:=IdHTTP.Post(LoginData.SUrl, LoginInfo);
   except
    ShowMessage("Возможно в адресе ошибка"#13#10"Не найден путь: "+LoginData.SUrl); Exit;
   end;
   try
    DtMdl.IdHTTP.URL.URI:=AnsiLowerCase(DtMdl.IdHTTP.URL.URI);

    if Pos("login.csp", DtMdl.IdHTTP.URL.URI)>0 then begin
     ShowMessage("Не верный логин"); Exit;
    end;

    Result:=Pos("personal.csp", DtMdl.IdHTTP.URL.URI)>0;
   except
    ShowMessage("Error login");
   end;

//    Result:=True;
  except
   Result:=False;
  end;
 finally
  LoginInfo.Free;
  Screen.Cursor:=crDefault;
 end;
end;


 
{RASkov} ©   (2007-08-13 19:24) [5]

Вроде разобрался....
Т.е. если при старте, то Application.CreateForm(TDtMdl, DtMdl); - создали до логина
и если обратится к IdHttp.Рost то происходит автоконнект
но если нажать отмену, то что-то в Winsock2 "вываливается".... так как нет нормально завершения DtMdl
а если это в работе программы сделать, то все потом нормально закрывается... низнаю как объяснить :(
Вообщем вставил такую строку:
function LoginInHost(AFirstLogin: Boolean): Boolean;
.....
begin
 FlName:=ExtractFilePath(Application.ExeName)+LOGINFILENAME;
 Result:=FileExists(FlName);
 if Result and AFirstLogin then begin
  LoadLoginData(FlName);
  if LoginData.NotAsk then Result:=Login else ShowLoginForm(LoginData.Remember);
 end else ShowLoginForm(not AFirstLogin);
!!  if AFirstLogin then DtMdl.Free;
end;

И все встало на свои места...


 
{RASkov} ©   (2007-08-13 21:34) [6]

А можно я сюда же еще один вопросик задам?
При таком вот подходе:
function Login: Boolean;
.......
begin
 with TFrmConnectInfo.Create(nil) do try
  DtMdl.FrmInfoHandle:=Handle;             //нужно для отправки сообщений окну FrmConnectInfo
  lbStatus.Caption:="Начало соединения";
  Show; Refresh;
......
     FLoginData.SFirstPage:=IdHTTP.Post(LoginData.SUrl, LoginInfo);
.......
 finally
  DtMdl.FrmInfoHandle:=0;
  Free;
 end;
end;

Можно ли как-нибудь получить в процентах ход выполнения Post?
Я пока добился только вот этого:
unit UConnectInfo;
....
const WM_UPDTSTATUS = WM_USER+1;
.....
type
 TFrmConnectInfo = class(TForm)
   lbStatus: TLabel;
   ProgressBar1: TProgressBar;
 private
   procedure UpdateStatus(var Mes: TMessage); message WM_UPDTSTATUS;
   { Private declarations }
......
procedure TFrmConnectInfo.UpdateStatus(var Mes: TMessage);
begin
 lbStatus.Caption:=String(Mes.LParam);
 Refresh;
end;

И в UDtMdl

procedure TDtMdl.IdHTTPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: String);
begin
 if FrmInfoHandle<>0 then SendMessage(FrmInfoHandle, WM_UPDTSTATUS, 0, Integer(AStatusText));
end;


В таком виде вроде все нормально... есть информационно окно, которое избавляет от чувства зависания программы, так как там постоянно "что-то" мелькает...
Но и хотелось бы для полного "кайфа" сделать заполнение ProgressBar"а.... Можно ли это как-то "замутить" или это в данном случае не реально?
Я так же почитал и про
IdHTTP.OnWorkBegin
IdHTTP.OnWork
IdHTTP.OnWorkEnd
но так понял, что от них толку мало.... так как я незнаю AWorkCountMax в OnWorkBegin...
Впрочем там Connect/Disconnect происходит по нескольку раз, т.е. несколько раз OnWorkХхх вызываются...
А может я не с того компонента начал знакомство с программированием для интернета....? Из БОЛЬШОГО их обилия я почему-то остановился пока на нем(TIdHTTP)... Спасибо за время потраченное на чтение моих постов. Но иначе никак.... мне кажется, что если мне не понятно, то и всем так :)
Отсюда такие подробности.



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

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

Наверх





Память: 0.48 MB
Время: 0.037 c
3-1178897039
DeadMeat
2007-05-11 19:23
2007.09.09
Identity


2-1186748332
Rumin
2007-08-10 16:18
2007.09.09
Miranda


4-1174273508
Grademax
2007-03-19 06:05
2007.09.09
Как сделать, чтобы у exe-файла правильно отображались иконки...


15-1187144554
Slider007
2007-08-15 06:22
2007.09.09
С днем рождения ! 15 августа 2007 среда


2-1187346621
preved
2007-08-17 14:30
2007.09.09
Винчестеры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский