У меня есть структура ниже и Pointer
для этой же структуры.
После этого у меня есть статический массив, array[0 .. 255] of Client
. Основанный на этом следующем полном коде, как я могу заполнить определенный «клиент» (элемент) нулями, когда «клиент» (элемент) «разъединяет» или «освободить пространство» новому «клиенту» (элементу), не потеряв этот фиксированный размер массива (Clients
)? Посмотрите мою попытку, но я не знаю, верна ли эта идея, я верю, что нет, потому что IDE говорит, что это невозможно, назначьте массив Integer
(0) на Clients
.
Моя попытка была основана на этом комментарии , где вопрос связан со статическими массивами.
type
PClient = ^Client;
Client = record
Connections: array [0 .. 1] of TSocket;
uhId: DWORD;
_hWnd: HWND;
Pixels: PByte;
pixelsWidth, pixelsHeight: DWORD;
screenWidth, screenHeight: DWORD;
hDcBmp: HDC;
minEvent: THandle;
fullScreen: BOOL;
windowRect: TRect;
end;
var
Clients: array [0 .. 255] of Client;
//...
function GetClient(Data: Pointer; uhId: Boolean): PClient;
var
I: Integer;
begin
Result := nil;
for I := 0 to 255 do
begin
if uhId then
begin
if Clients[I].uhId = DWORD(Data) then
begin
Result := @Clients[I];
Break;
end;
end
else
begin
if Clients[I]._hWnd = HWND(Data) then
begin
Result := @Clients[I];
Break;
end;
end;
end;
end;
procedure removeClient;
var
_client: PClient;
_uhId: DWORD;
I: Integer;
begin
_uhId := 123456;
_client := GetClient(Pointer(_uhId), True);
{ to add a item i do }
for I := 0 to 255 do
begin
if Clients[I].uhId = 0 then
begin
_client := @Clients[I];
end;
end;
{ my attempt to fill with 0 (zero) a determinated element and yours propeties }
for I := 0 to 255 do
begin
if Clients[I].uhId <> 0 then
begin
Clients[I] := 0; // << Error of "incompatible types"
_client := @Clients[I];
end;
end;
end;