Показать сообщение отдельно
Старый 14.01.2008, 21:03   #30
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию

SWS я по своему решил проблему создания немодального окна :D
может это конечно не самый лучший вариант но как говорится - "чем богаты..."
я сделал дллку которая генерирует ини файлик (в делфи на удивление просто с ини файлами обращатся)
а затем я просто написал прогу которая читает этот файл и таким образом я связал экзешник с длл
в общем отпала необходимость создавать форму прямо из длл (хотя хотелось бы)

длл
Код:
library dllll;
uses
   SysUtils, IniFiles;

var
MobsX, MobsY, MobsZ, MobsRAS, MobsID: array[1..30] of integer;
MaxID, MyXpos, MyYpos, MyZpos, MyID: integer;
on1: Boolean;

//-------------------------------------------------
function GetMaxX: integer;
var
i, MaxX: Integer;
begin
MaxX:=0;
MaxID:=0;
 for i:= 1 to 30 do
 begin
  if (MobsRAS[i]>=MaxX) then
  begin
  MaxX:=MobsRAS[i];
  MaxID:=i;
  end;
 end;
 result:=MaxX;
end;
//-------------------------------------------------
function Summ: integer;
var
i, Summa: Integer;
begin
Summa:=0;
 for i:= 1 to 30 do
 begin
   if (MobsID[i]>1) then
   begin
   Summa:=Summa+1;
   end;
 end;
 Summa:=Summa+2;
 result:=Summa;
end;
//-------------------------------------------------
function rastoyanie(xpos1, ypos1, xpos2, ypos2:integer): integer;
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
//-------------------------------------------------
function FuncTst1(s, i, j: string): integer;
var
   sIniFile: TIniFile;
   sPath : String[160];
begin
   GetDir(0,sPath);
   sIniFile := TIniFile.Create(sPath+'\BOT.INI');
   sIniFile.WriteString(s, i, j);
   sIniFile.Free;
   result:=1;
end;

//-------------------------------------------------
function FuncTst2(s : string): integer;
var
   sIniFile: TIniFile;
   sPath : String[160];
begin
   GetDir(0,sPath);
   sIniFile := TIniFile.Create(sPath+'\BOT.INI');
   sIniFile.EraseSection(s);
   sIniFile.Free;
   result:=1;
end;
//-------------------------------------------------
function DelElArr(ele:integer): integer;  //??????? ????!
begin
   MobsID[ele]:=0;
   MobsRAS[ele]:=0;
   MobsX[ele]:=0;
   MobsY[ele]:=0;
   MobsZ[ele]:=0;
   //Attacker[ele]:=false;
   result:=1;
end;
//-------------------------------------------------

function AddBD(id, posx, posy, posz:integer): integer; stdcall;
var
k: Integer;
povtor: Boolean;
begin
   if (on1=true) then begin
if (Summ>=25) or (GetMaxX>2500) then DelElArr(MaxID);

        povtor:=false;
        for k:= 1 to 30 do
        begin
          if (MobsID[k]=id) and (MobsX[k]=posx) and (MobsY[k]=posy) then
          begin
          povtor:=true;
          break;
          end;
           if (MobsID[k]=id) then
           begin
        MobsRAS[k] := rastoyanie(MyXpos, MyYpos, posx, posy);
        MobsX[k]:=posx;
        MobsY[k]:=posy;
        MobsZ[k]:=posz;
        povtor:=true;
        break;
           end;
        end;

    if (povtor=false) then begin
     for k:= 1 to Length(MobsID) do begin
      if (MobsID[k]=0) then begin
        MobsRAS[k] := rastoyanie(MyXpos, MyYpos, posx, posy);
        MobsID[k]:=id;
        MobsX[k]:=posx;
        MobsY[k]:=posy;
        MobsZ[k]:=posz;
        break;
      end;
     end;
    end;

  //  FuncTst2('bd');
    for k:= 1 to 30 do begin
    if (MobsID[k]<>0) then FuncTst1('bd', IntToStr(k), IntToStr(k)+'-'+IntToStr(MobsRAS[k])+'-'+IntToStr(MobsID[k])+'-x'+IntToStr(MobsX[k])+'-y'+IntToStr(MobsY[k])+'-z'+IntToStr(MobsZ[k]));
    if (MobsID[k]=0) then  FuncTst1('bd', IntToStr(k), '-');
    end;
  end;
  result:=1;
end;
//-------------------------------------------------
function funcON(id, posx, posy, posz:integer): integer; stdcall;
begin
if (on1<>true) then begin
MyID:=id;
MyXpos:=posx;
MyYpos:=posy;
MyZpos:=posz;
on1:=true;
end;
result:=2;
end;
//-------------------------------------------------
exports AddBD, funcON;

begin
end.
экзешник читающий ини
Код:
unit rUnit1;

interface

uses
  IniFiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
   i: integer;
   sIniFile: TIniFile;
   sPath : String[160];
begin
 GetDir(0,sPath);
 sIniFile := TIniFile.Create(sPath+'\BOT.INI');
 ListBox1.clear;
 for i:= 1 to 20 do begin
 if ('-1'<>sIniFile.ReadString('bd', inttostr(i), inttostr(-1))) then
 ListBox1.Items.Add( sIniFile.ReadString('bd', inttostr(i), inttostr(-1) ));
 end;

//ListBox1.Items.Add( sIniFile.ReadString('bd', '1', inttostr(-1) ));

 sIniFile.Free;
end;

end.
и ещё ты написал как форму создавать а как просто переменную передать из длл в пакетхак можеш скинуть код ??
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
skymanrus вне форума   Ответить с цитированием