Добавить в избранное или известие delphi [duplicate]

Я предпочитаю JQuery. Это чище и легко читается.

 $.each($.parseJSON(data), function (key, value) {
    alert(value.<propertyname>);
});

5
задан Stefan Wanitzek 17 March 2016 в 16:54
поделиться

1 ответ

Используйте TThread.Synchronize и передайте ему другую анонимную функцию. Затем вы можете вызвать updateui в анонимной функции:

TThread.CreateAnonymousThread(
  procedure
  begin
    // do whatever you want

    TThread.Synchronize(nil,
      procedure
      begin
        updateui();
      end);

   // do something more if you want
  end
).Start();

Синхронизация обычно дорога (относительно производительности). Только делайте это, когда они действительно необходимы. Вы можете увеличить производительность, если вы расширяете updateui -метод, чтобы уменьшить операции рисования.

Это возможно для вызова SendMessage с помощью WM_SETREDRAW :

procedure StopDrawing(const Handle: HWND);
const
  cnStopDrawing = 0;
begin
  SendMessage(Handle, WM_SETREDRAW, cnStopDrawing, 0);
end;

procedure ContinueDrawing(const Handle: HWND);
const
  cnStartDrawing = 0;
begin
  SendMessage(Handle, WM_SETREDRAW, cnStartDrawing, 0);

  // manually trigger the first draw of the window
  RedrawWindow(Handle, nil, 0,
    RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
end;

Добавить вызов StopDrawing () в верхней части updateui () и вызов ContinueDrawing () в конце updateui () . Вызов ContinueDrawing () должен быть в finally-block . Это гарантирует, что окно будет окрашено даже после возникновения исключения во время выполнения updateui.

Пример:

procedure TMain.updateui;
begin
  try
    StopDrawing(Handle);

    Panel3.Show;

    Label57.Caption := 'Change 1';
    Label59.Caption := 'Change 2';

    // ...
  finally
    // Code under finally gets executed even if there was an error
    ContinueDrawing(Handle);
  end;
end;
10
ответ дан Stefan Wanitzek 27 August 2018 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: