www.pudn.com > Client599.rar > MaketSystem.pas


unit MaketSystem; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Dialogs, 
  Grobal2 , HUtil32, EdCode; 
 
const 
 
    MAKET_ITEMCOUNT_PER_PAGE    = 10; 
    MAKET_MAX_PAGE              = 12; 
    MAKET_MAX_ITEM_COUNT        = MAKET_ITEMCOUNT_PER_PAGE * MAKET_MAX_PAGE; 
 
    MAKET_STATE_EMPTY           = 0; 
    MAKET_STATE_LOADING         = 1; 
    MAKET_STATE_LOADED          = 2; 
 
{ 
    TMaketItem = record 
      Item   	: TClientItem;	// º¯°æµÈ ´É·ÂÄ¡´Â ¿©±â¿¡ Àû¿ëµÊ. 
      SellIndex	: integer;	    // ÆÇ¸Å¹øÈ£ 
      SellPrice	: integer;	    // ÆÇ¸Å °¡°Ý 
      SellWho	: string[20];	// ÆÇ¸ÅÀÚ 
      Selldate	: string[10] 	// ÆÇ¸Å³¯Â¥(0312311210 = 2003-12-31 12:10 ) 
      SellState : word          // 1 = ÆÇ¸ÅÁß , 2 = ÆÇ¸Å¿Ï·á 
   end; 
} 
 
type 
    TMarketItemManager = class(TObject) 
    private 
        FState          : integer;  // ¸Þ´ÏÀú »óÅÂ  0 = Empty , 1 = Loading 2 = Full 
 
        FMaxPage        : integer;  // ÃÖ´ë ÆäÀÌÁö 
        FCurrPage       : integer;  // ÇöÀç ÆäÀÌÁö 
        FLoadedpage     : integer;  // ·ÎµùµÈ ÃÖ´ë ÆäÀÌÁö 
 
        FItems          : TList;    // MaketItem ÀÇ ¸®½ºÆ® 
        FSelectedIndex  : integer;  // ¼±ÅÃµÈ À妽º 
 
        FUserMode       : integer; 
        FItemType       : integer; 
        bFirst          : integer; 
    public 
        RecvCurPage     : integer; 
        RecvMaxPage     : integer; 
    private 
        procedure   RemoveAll; 
        procedure   InitFirst; 
 
        function    CheckIndex( index_ : integer) : Boolean; 
    public 
        constructor Create; 
        destructor  Destroy; override; 
 
        procedure   Load; 
        procedure   ReLoad; 
 
        Procedure   Add( pInfo_ :PTMarketItem ); 
        Procedure   Delete( Index_ : integer ); 
        Procedure   Clear; 
 
        function    GetItem( Index_ : integer ; var rSelected : Boolean):PTMarketItem; overload; 
        function    GetItem( Index_ : integer ):PTMarketItem; overload; 
        function    Select( Index_ :integer): Boolean; 
        function    IsEmpty : Boolean; 
        function    Count   : integer; 
        function    GetFirst : integer; 
        function    PageCount:integer; 
        function    GetUserMode : integer; 
        function    GetItemType : integer; 
 
        procedure   OnMsgReadData(msg :TDefaultMessage;body : string); 
        procedure   OnMsgWriteData(msg :TDefaultMessage;body : string); 
 
    end; 
var 
    g_Market : TMarketItemManager; 
 
implementation 
uses 
    ClMain; 
 
// »ý¼ºÀÚ 
constructor TMarketItemManager.Create; 
begin 
    InitFirst; 
end; 
// ¼Ò¸êÀÚ 
destructor  TMarketItemManager.Destroy; 
begin 
    RemoveAll; 
 
    inherited; 
end; 
 
// µ¥ÀÌÅÍ »èÁ¦ 
procedure TMarketItemManager.RemoveAll; 
var 
    i : integer; 
    pinfo : PTMarketItem; 
begin 
 
    for i := FItems.count -1 downto 0 do 
    begin 
        pinfo := FItems.Items[i]; 
 
        if pinfo <> nil then dispose ( pinfo ); 
 
        FItems.delete(i); 
    end; 
 
    FItems.Clear; 
 
    FState := MAKET_STATE_EMPTY; 
 
end; 
 
function TMarketItemManager.CheckIndex ( Index_ : integer ) : Boolean; 
begin 
    if ( Index_ >= 0 )and ( Index_ < FItems.count ) then result := true 
    else result := false; 
end; 
 
// ÃʱâÈ­ 
procedure TMarketItemManager.InitFirst; 
begin 
    FItems := TList.Create; 
    FSelectedIndex := -1; 
    FState := MAKET_STATE_EMPTY; 
 
    RecvCurPage := 0; 
    RecvMaxPage := 0; 
end; 
 
// µ¥ÀÌÅÍ Àоî¿È 
procedure TMarketItemManager.Load; 
begin 
    if IsEmpty and ( FState = MAKET_STATE_EMPTY) then 
    begin 
        // µ¥ÀÌÅÍ ÀбâÀ§ÇÑ ¸Þ¼¼Áö Àü¼Û 
//        OnMsgReadData; 
    end; 
end; 
 
procedure TMarketItemManager.ReLoad; 
begin 
    if not IsEmpty then RemoveAll; 
 
    Load; 
end; 
 
//¾ÆÀÌÅÛ Ãß°¡ 
Procedure TMarketItemManager.Add( pInfo_ :PTMarketItem ); 
begin 
    if (FItems <> nil) and ( pInfo_ <> nil) then 
    begin 
        FItems.Add ( pInfo_ ); 
    end; 
end; 
 
//¾ÆÀÌÅÛ »èÁ¦ 
Procedure TMarketItemManager.Delete( Index_ : integer ); 
begin 
 
 
end; 
 
Procedure TMarketItemManager.Clear; 
begin 
    RemoveAll; 
    InitFirst; 
end; 
 
// µ¥ÀÌÅÍ ¼±Åà 
function TMarketItemManager.Select( Index_ : integer): Boolean; 
begin 
    Result := false; 
 
    if  CheckIndex(Index_) then 
    begin 
        FSelectedIndex := Index_; 
        Result := true; 
    end; 
end; 
 
//µ¥ÀÌÅͰ¡ ºñ¾îÀÖ´ÂÁö 
function TMarketItemManager.IsEmpty : Boolean; 
begin 
    if FItems.Count > 0 then Result := false 
    else Result := true ; 
 
end; 
 
//°³¼ö¸¦ ¾ò¾î¿Â´Ù. 
function TMarketItemManager.Count : integer; 
begin 
    Result := FItems.Count; 
end; 
 
function TMarketItemManager.GetFirst : integer; 
begin 
    Result := bFirst; 
end; 
 
// ÆäÀÌÁö¼öÀÚ¸¦ °¡Á®¿Â´Ù. 
function TMarketItemManager.PageCount : integer; 
begin 
    if FItems.Count = 0 then Result := 0 
    else Result := FItems.Count div MAKET_ITEMCOUNT_PER_PAGE +1; 
end; 
 
function TMarketItemManager.GetUserMode : integer; 
begin 
    Result := FUserMode; 
end; 
 
function TMarketItemManager.GetItemType : integer; 
begin 
    Result := FitemType; 
end; 
 
 
//µ¥ÀÌÅ͸¦ Àоî¿Ã¶§ ¼±ÅõȳÑÀÎÁö ±¸º°ÇÑ´Ù. 
function TMarketItemManager.GetItem( 
    Index_          : integer ;     // ¾ÆÀÌÅÛ À妽º 
    var rSelected    : Boolean      // ¼±ÅõȳÑÀÎÁö ¸®ÅÏÇÔ 
    ):PTMarketItem; 
begin 
    // µ¥ÀÌÅ͸¦ ¾ò°í 
    Result := GetItem( Index_ ); 
 
    // ¼±ÅõȳѰú °°À¸¸é TRUE 
    if Result <> nil then 
    begin 
        if Index_ = FSelectedIndex then rSelected := true 
        else rSelected := false; 
    end; 
 
end; 
 
// µ¥ÀÌÅÍ ÀоîµéÀ̱â. 
function TMarketItemManager.GetItem( 
    Index_          : integer      // ¾ÆÀÌÅÛ À妽º 
    ):PTMarketItem; 
begin 
    Result := nil; 
 
    if checkIndex( Index_ ) then 
    begin 
        result := PTMarketItem( FItems.Items[Index_]); 
 
    end; 
end; 
 
 
// ¿©·¯°¡Áö ¸Þ¼¼Áö Àü¼Û¹× ¼ö½Å ------------------------------------------------- 
procedure TMarketItemManager.OnMsgReadData(msg :TDefaultMessage;body : string); 
begin 
 
end; 
 
procedure TMarketItemManager.OnMsgWriteData(msg :TDefaultMessage;body : string); 
var 
//    itemtype    : integer; 
//    bFirst      : integer; 
    nCount      : integer; 
    i           : integer; 
    pInfo       : PTMarketItem; 
    buffer1     : string; 
    buffer2     : string; 
begin 
//    DScreen.AddSysMsg ('GET MARKET MSG'); 
 
    case msg.Ident of 
    SM_MARKET_LIST: 
        begin 
            FUserMode   := msg.Recog; 
            FItemType   := msg.Param; 
            bFirst      := msg.Tag; 
 
            buffer1 := DecodeString( body ); 
 
            if bFirst > 0 then Clear; 
 
            buffer1 := GetValidStr3 ( buffer1, buffer2, ['/']); 
            nCount :=  Str_ToInt( buffer2 , 0); 
 
            buffer1 := GetValidStr3 ( buffer1, buffer2, ['/']); 
            RecvCurPage :=  Str_ToInt( buffer2 , 0); 
 
            buffer1 := GetValidStr3 ( buffer1, buffer2, ['/']); 
            RecvMaxPage :=  Str_ToInt( buffer2 , 0); 
 
            for i := 0 to nCount-1 do 
            begin 
 
                buffer1 := GetValidStr3 ( buffer1 , buffer2, ['/']); 
                new ( pInfo ); 
                DecodeBuffer( buffer2 , pointer( pInfo ) , sizeof( TMarketItem ) ); 
 
                Add( pInfo ); 
            end; 
 
        end; 
    end; 
end; 
 
end.