Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.05.2013, 15:05
alexkhua alexkhua вне форума
Прохожий
 
Регистрация: 01.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Не выводится форма

Приветствую!. Пишу сниффер для бота, скриптовой движок на делфи встроен в бота. Код у меня рабочий - все пашет, но форма выводится только 1 раз. Чтоб вывести форму еще раз приходится перезапускать скриптовой движок. В чем может быть проблема ?
p.s Это пока только шаблон, много нужно дописать, но меня интересует только почему форма не выводится при втором запуске скрипта...
Код:
uses Forms, StdCtrls, classes, sysutils;


const CHAR_NAME = 'xiaoda00o0';
const SELF_TARGET = TRUE;  

type
  TEvents = class (tobject)
    procedure OnClickLogON(Sender: tobject);
    procedure OnClickLogOFF(Sender: tobject);
    procedure OnClickDelRow(Sender: tobject);
    procedure OnClickSave(Sender: tobject);
  end;






  
var Form  : TForm;
    Button1,Button2,Button3,Button4 : TButton;
    Memo : TMemo; 
    OnClickAction : TEvents;
    logs, filename: string;
    L:TStringList;
    myDate : TDateTime;
    obj, i: TL2Live;
    CurX, CurY, CurZ, fHandle: integer;
    Action: TL2Action;
   


 
procedure TEvents.OnClickLogON(sender: tobject);

  
begin
script.newthread(SnifferCore);
end;
  
  procedure TEvents.OnClickLogOFF(sender: tobject);
  begin
    Print('test2');
  end; 

    procedure TEvents.OnClickDelRow(sender: tobject);
  begin
    Print('test3');
  end; 

      procedure TEvents.OnClickSave(sender: tobject);
  begin
    Print('test4');
  end; 

procedure MainProc;
begin
  OnClickAction := TEvents.Create;
  Form  := TForm.Create(nil);
  Form.Caption := 'L2Sniff 1.0';
  Form.Left:= 34;
  Form.Top:= 44;
  Form.Width:= 359;
  Form.Height:= 571; 
  
  Button1 := TButton.Create(Form);
  Button1.Show;
  Button1.Left:= 272;
  Button1.Top:= 8;
  Button1.Width:= 75;
  Button1.Height:= 25;
  Button1.Parent := Form;
  Button1.Caption := 'Log ON';
  Button1.OnClick := OnClickAction.OnClickLogON; 
    
  Button2 := TButton.Create(Form);
  Button2.Show;
  Button2.Left:= 272;
  Button2.Top:= 40;
  Button2.Width:= 75;
  Button2.Height:= 25;
  Button2.Parent := Form;
  Button2.Caption := 'Log OFF';
  Button2.OnClick := OnClickAction.OnClickLogOFF;
  
  Button3 := TButton.Create(Form);
  Button3.Show;
  Button3.Left:= 272;
  Button3.Top:= 72;
  Button3.Width:= 75;
  Button3.Height:= 25;
  Button3.Parent := Form;
  Button3.Caption := 'DellLastRow';
  Button3.OnClick := OnClickAction.OnClickDelRow; 
  
  Button4 := TButton.Create(Form);
  Button4.Show;
  Button4.Left:= 272;
  Button4.Top:= 104;
  Button4.Width:= 75;
  Button4.Height:= 25;
  Button4.Parent := Form;
  Button4.Caption := 'Save';
  Button4.OnClick := OnClickAction.OnClickSave;  
  
  Memo := TMemo.Create(Form);
  Memo.Show; 
  Memo.Left := 8;
  Memo.Top := 8;
  Memo.Width := 257;
  Memo.Height := 521;
  Memo.Parent := Form;     
  
  Form.Show;
  
end;

procedure OnFree; 
begin
  if assigned(Form)           then Form.Free;
  if assigned(Button1)        then Button1.Free;  
  if assigned(Button2)        then Button2.Free;  
  if assigned(Button3)        then Button3.Free;  
  if assigned(Button4)        then Button4.Free;
  if assigned(OnClickAction)  then OnClickAction.Free;
  if assigned(L)              then L.Free;
  
end;

Function showTargetLog():String;
begin
logs:=('Engine.Settarget('''+User.Target.Name+''');' );
        print(logs);
        L.add(logs);
       
        
end;

Function showMoveLog():String;
begin
  logs:=('engine.moveto('+inttostr(User.x)+', '+inttostr(User.y)+', '+inttostr(User.z)+');' );
  print(logs);
  CurX:=User.X; CurY:=User.Y; CurZ:=User.Z;
  L.add(logs);
end;



procedure SnifferCore;
begin
filename:=('C:\logs '+FormatDateTime('dd/mm/yy hh_mm_ss', now)+'.txt');
fHandle:=FileCreate(filename);
print('File Created '+filename);
FileClose(fHandle);
L := TStringList.Create;

  
  while (engine.status = lsonline) do begin  
    Action:=Engine.WaitAction([lastopmove,laTarget], obj, i) ;
    if Action = LaStopMove then begin
      if obj.name = CHAR_NAME then 
    
    
     
      if (CurX<>User.X) or (CurY<>User.Y) or (CurZ<>User.Z) then 
      ShowMoveLog();
       
		
   
     
    
      end;
   
if Action = LaTarget then begin  
   if (obj.name = CHAR_NAME) and SELF_TARGET then
   showTargetLog();
   end
      else
        
   if (obj.name = CHAR_NAME) and (user.Target.Name<>CHAR_NAME) then
        showTargetLog();
         end;
       end; 
    
    
begin
Script.MainProc(@MainProc);
  Delay(-1);  
end.



Последний раз редактировалось alexkhua, 01.05.2013 в 15:08.
Ответить с цитированием
  #2  
Старый 01.05.2013, 16:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Попробуйте вместо метода SomeObj.Free использовать FreeAndNil(SomeObj)
Ответить с цитированием
  #3  
Старый 01.05.2013, 18:19
alexkhua alexkhua вне форума
Прохожий
 
Регистрация: 01.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

не помогло (
Ответить с цитированием
  #4  
Старый 03.05.2013, 00:53
alexkhua alexkhua вне форума
Прохожий
 
Регистрация: 01.05.2013
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Проблема решена, сначала необходимо освободить дочерние формы.
procedure OnFree;
begin

if assigned(Button1) then Button1.Free;
if assigned(Button2) then Button2.Free;
if assigned(Button3) then Button3.Free;
if assigned(Button4) then Button4.Free;
if assigned(OnClickAction) then OnClickAction.Free;
if assigned(L) then L.Free;
if assigned(Form) then Form.Free;
Ответить с цитированием
  #5  
Старый 03.05.2013, 11:59
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Если уж совсем по-хорошему, то раз парентом для большинства визуальных компонентов задана форма, то их и разрушать в OnFree не обязательно т.к. в OnDestroy родителя это и так происходит автоматом. Будет меньше кода.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:04.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025