Как я могу сказать, в настоящее время ли управление Delphi видимо?

Хорошо, после долгих копаний, исследований и ударов головой о стол, я нашел свою проблему. У меня был NULL в моей базе данных, и API остановился на NULL.

9
задан Mason Wheeler 14 March 2009 в 19:16
поделиться

3 ответа

Несколько лет назад у меня был тот же вид проблемы для Формы: Я искал способ определить, на самом деле ли Форма видима (даже только частично) пользователю.
В особенности, когда это, как предполагалось, было видимо, и Показ был Верен, но окно было на самом деле полностью позади другого.
Вот код, он мог быть адаптирован к WinControl...

{----------------------------------------------------------}
function IsMyFormCovered(const MyForm: TForm): Boolean;
var
   MyRect: TRect;
   MyRgn, TempRgn: HRGN;
   RType: Integer;
   hw: HWND;
begin
  MyRect := MyForm.BoundsRect;            // screen coordinates
  MyRgn := CreateRectRgnIndirect(MyRect); // MyForm not overlapped region
  hw := GetTopWindow(0);                  // currently examined topwindow
  RType := SIMPLEREGION;                  // MyRgn type

// From topmost window downto MyForm, build the not overlapped portion of MyForm
  while (hw<>0) and (hw <> MyForm.handle) and (RType <> NULLREGION) do
  begin
    // nothing to do if hidden window
    if IsWindowVisible(hw) then
    begin
      GetWindowRect(hw, MyRect);
      TempRgn := CreateRectRgnIndirect(MyRect);// currently examined window region
      RType := CombineRgn(MyRgn, MyRgn, TempRgn, RGN_DIFF); // diff intersect
      DeleteObject( TempRgn );
    end; {if}
    if RType <> NULLREGION then // there's a remaining portion
      hw := GetNextWindow(hw, GW_HWNDNEXT);
  end; {while}

  DeleteObject(MyRgn);
  Result := RType = NULLREGION;
end;

function IsMyFormVisible(const MyForm : TForm): Boolean;
begin
  Result:= MyForm.visible and
           isWindowVisible(MyForm.Handle) and
           not IsMyFormCovered(MyForm);
end;
16
ответ дан 4 December 2019 в 11:08
поделиться

Я думаю, что это что TWinControl. Показ для. Я не уверен, насколько надежный это.

1
ответ дан 4 December 2019 в 11:08
поделиться

Вы могли присоединить код к событию OnPaint? Это называют очень часто, и я думаю, только назван, когда управление на самом деле будет нарисованным (например, видимо в способе, которым Вы имеете в виду).

2
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

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