Попробуйте следующим образом. Передайте индекс для указанного адреса, прочитайте элемент контактов для этого конкретного адреса и добавьте новую группу контактов.
addPhoneNumber(index: number): void {
this.addressArray[index].contacts.push(this.contactsGroup());
console.log(this.addressArray[index].contacts);
}
Надеюсь, это поможет !!!
Наконец я имею, изменяют мой код для этого:
procedure MyComponent.MouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);
begin
if GetTickCount-LastMoveTick>50 then begin
AnotherComponent.Top := Y;
AnotherComponent.Left := X;
LastMoveTick := GetTickCount;
end;
end;
Действительно легкий реализовать (2 добавленные строки), никакой таймер, работы хорошо для меня...
Чтобы попытаться понять это, я предлагаю, чтобы Вы записали стандартную программу TestMove, которая перемещает Ваш AnotherComponent автоматически с корректируемым повторением/задержками для контроля ЦП.
Я держал пари, что это инициировало дорогостоящее перекрашивание или некоторый другой ЦП интенсивное вычисление.
Поэтому Исследуйте тесно, если у Вас есть какой-либо обработчик событий на этом компоненте сначала, затем пойдите с наследованным поведением...
Возможно, вместо того, чтобы переместить сам компонент Вы перемещаете 'теневое' и только перемещаете компонент, после того как пользователь позволяет кнопке мыши пойти. Вид подобного drag&drop.
Вы могли создать TTimer, который опрашивает текущее положение мыши каждые 0.10 секунды или так, затем положения "AnotherComponent" согласно текущему положению мыши.
Затем Вы не уволили бы свое событие за каждый пиксель движения мыши - Вам не будет нужно никакое событие OnMouseMove на Вашем компоненте управления вообще.
На моем компьютере это в основном не оказывает влияния производительности вообще.
procedure TForm1.Timer1Timer(Sender: TObject);
var
pt: TPoint;
begin
//Is the cursor inside the controlling component? if so, position some
//other control based on that mouse position.
GetCursorPos(pt);
if MouseWithin(pt.x,pt.y,MyComponent,Form1.Left,Form1.Top) then begin
//replace with whatever real positioning logic you want
AnotherComponent.Top := pt.y;
AnotherComponent.Left := pt.x;
end;
end;
function TForm1.MouseWithin(mouseX, mouseY: integer;
const comp: TWinControl; const ParentWindowLeft: integer;
const ParentWindowTop: integer): boolean;
var
absoluteCtrlX, absoluteCtrlY: integer;
begin
//take a control, and the current mouse position.
//tell me whether the cursor is inside the control.
//i could infer the parent window left & top by using ParentwindowHandle
//but I'll just ask the caller to pass them in, instead.
//get the absolute X & Y positions of the control on the screen
//needed for easy comparison to mouse position, which will be absolute
absoluteCtrlX := comp.Left + ParentWindowLeft;
absoluteCtrlY := comp.Top + ParentWindowTop +
GetSystemMetrics(SM_CYCAPTION);
Result := (mouseX >= absoluteCtrlX)
and (mouseX < absoluteCtrlX + comp.Width)
and (mouseY >= absoluteCtrlY)
and (mouseY <= absoluteCtrlY + comp.Height);
end;
Это не может быть само перемещение, для которого нужна такая мощность ЦП, по всей вероятности перемещение заставляет компонент перерисовывать себя так или иначе. Можно ли избежать этого AnotherComponent
перерисовывается на каждом перемещении? Это не должно быть необходимо, если это не контейнер фильма.
Что-либо связанное с событием перемещения мыши будут называть очень часто, поскольку мыши являются устройством ввода данных высокого разрешения. Я не волновался бы об использовании CPU хотя, потому что Ваш обработчик только запущен максимально быстро на основе того, насколько занятый система. Другими словами, это - только maxing ЦП, потому что ничто иное не.
Из MSDN:
Мышь генерирует входное событие, когда пользователь перемещает мышь, или нажимает или отпускает кнопку мыши. Система преобразовывает входные события мыши в сообщения и отправляет их на очередь сообщений соответствующего потока. Когда сообщения мыши добавлены быстрее, чем поток может обработать их, система отбрасывает все кроме нового сообщения мыши.
Теперь могут быть некоторые исключения к этому. Вы могли сделать некоторое тестирование, чтобы быть уверенными путем выполнения некоторого другого обрабатывающего интенсивного действия и видеть, насколько материал перемещения мыши влияет на него.