Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 

 
 
type
  PACCOUNT_INFO_EX = ^ACCOUNT_INFO_EX;
  ACCOUNT_INFO_EX = record
    bUpdateState   : Boolean;
    clsid          : TGUID;
    dwEqualIndex   : Integer;
    pszAccount     : LPWSTR;
    cchAccountMax  : Integer;
    pszLogin       : LPWSTR;
    cchLoginMax    : Integer;
    pszPassword    : LPWSTR;
    cchPasswordMax : Integer;
    fBalance       : Double;
    fOverdraft     : Double;
    pszTarif       : LPWSTR;
    cchTarifMax    : Integer;
    pszUpdated     : LPWSTR;
    cchUpdatedMax  : Integer;
    dwTarifDays    : Integer;
    dwTarifDaysLeft: Integer;
    dwErrorCode    : Integer;
    pszError       : LPWSTR;
    cchErrorMax    : Integer;
    bYellowAlert   : Boolean;
    fYellowAlert   : Double;
    bRedAlert      : Boolean;
    fRedAlert      : Double;
  end;
 
type
  TAccountInfoExArr = Array of ACCOUNT_INFO_EX;
 
//
 
procedure AllocDataItem(var ptrInfo: ACCOUNT_INFO_EX);
begin
  GetMem(ptrInfo.pszAccount, ptrInfo.cchAccountMax);
  GetMem(ptrInfo.pszLogin, ptrInfo.cchLoginMax);
  GetMem(ptrInfo.pszPassword, ptrInfo.cchPasswordMax);
  GetMem(ptrInfo.pszTarif, ptrInfo.cchTarifMax);
  GetMem(ptrInfo.pszUpdated, ptrInfo.cchUpdatedMax);
  GetMem(ptrInfo.pszError, ptrInfo.cchErrorMax);
end;
 
//
 
procedure FreeDataItem(var ptrInfo: ACCOUNT_INFO_EX);
begin
  FreeMem(ptrInfo.pszAccount, ptrInfo.cchAccountMax);
  FreeMem(ptrInfo.pszLogin, ptrInfo.cchLoginMax);
  FreeMem(ptrInfo.pszPassword, ptrInfo.cchPasswordMax);
  FreeMem(ptrInfo.pszTarif, ptrInfo.cchTarifMax);
  FreeMem(ptrInfo.pszUpdated, ptrInfo.cchUpdatedMax);
  FreeMem(ptrInfo.pszError, ptrInfo.cchErrorMax);
  ptrInfo.pszAccount  := nil;
  ptrInfo.pszLogin    := nil;
  ptrInfo.pszPassword := nil;
  ptrInfo.pszTarif    := nil;
  ptrInfo.pszUpdated  := nil;
  ptrInfo.pszError    := nil;
end;
 
//
 
procedure CopyDataItem(var DestInfo: ACCOUNT_INFO_EX; const SrcInfo: ACCOUNT_INFO_EX);
begin
  lstrcpynW(DestInfo.pszAccount, SrcInfo.pszAccount, DestInfo.cchAccountMax);
  lstrcpynW(DestInfo.pszLogin, SrcInfo.pszLogin, DestInfo.cchLoginMax);
  lstrcpynW(DestInfo.pszPassword, SrcInfo.pszPassword, DestInfo.cchPasswordMax);
  lstrcpynW(DestInfo.pszTarif, SrcInfo.pszTarif, DestInfo.cchTarifMax);
  lstrcpynW(DestInfo.pszUpdated, SrcInfo.pszUpdated, DestInfo.cchUpdatedMax);
  lstrcpynW(DestInfo.pszError, SrcInfo.pszError, DestInfo.cchErrorMax);
end;
 
//
 
procedure CopyArrayItem(var DestInfo: ACCOUNT_INFO_EX; const SrcInfo: ACCOUNT_INFO_EX);
begin
  CopyMemory(@DestInfo, @SrcInfo, SizeOf(ACCOUNT_INFO_EX));
  AllocDataItem(DestInfo);
  CopyDataItem(DestInfo, SrcInfo);
end;
 
//
 
function InsertArrayItem(var DynArray: TAccountInfoExArr; const IdItemIndex: Integer; InfoEx: ACCOUNT_INFO_EX): Integer;
var
  IdItem: Integer;
  iCount: Integer;
begin
  iCount := Length(DynArray);
  if (IdItemIndex = -1) and (iCount = 0) then
    Result := 0
  else
  if (IdItemIndex = -1) and (iCount <> 0) then
    Result := iCount
  else
    Result := IdItemIndex;
  SetLength(DynArray, iCount + 1);
  for IdItem := iCount downto (Result + 1) do
    DynArray[IdItem] := DynArray[IdItem - 1];
  CopyArrayItem(DynArray[Result], InfoEx);
end;
 
//
 
function DeleteArrayItem(var DynArray: TAccountInfoExArr; const IdItemIndex: Integer): Integer;
var
  bRet  : Boolean;
  IdItem: Integer;
  iCount: Integer;
begin
  Result := -1;
  bRet := (IdItemIndex >= Low(DynArray)) and (IdItemIndex <= High(DynArray));
  if bRet then
  begin
    FreeDataItem(DynArray[IdItemIndex]);
    iCount := Length(DynArray);
    for IdItem := (IdItemIndex + 1) to (iCount - 1) do
      DynArray[IdItem - 1] := DynArray[IdItem];
    SetLength(DynArray, iCount - 1);
    Result := Length(DynArray);
  end;
end;
 
//
 
function UpdateArrayItem(var DynArray: TAccountInfoExArr; const IdItemIndex: Integer; InfoEx: ACCOUNT_INFO_EX): Boolean;
var
  bRet   : Boolean;
  tmpInfo: ACCOUNT_INFO_EX;
  IdItem : Integer;
begin
  Result := FALSE;
  bRet := (IdItemIndex >= Low(DynArray)) and (IdItemIndex <= High(DynArray));
  if bRet then
  begin
    {
    FreeDataItem( DynArray[IdItemIndex] );
    CopyArrayItem( DynArray[IdItemIndex], InfoEx );
    Result := True;
    }
    CopyArrayItem(tmpInfo, InfoEx);
    DeleteArrayItem(DynArray, IdItemIndex);
    IdItem := InsertArrayItem(DynArray, IdItemIndex, tmpInfo);
    FreeDataItem(tmpInfo);
    Result := IdItem <> -1;
  end;
end;
 

 

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:56 18-08-2012 | Исправлено: Maks150988, 22:00 18-08-2012
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru