Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вернуть фокус на DBGrid 
:(
    Опции темы
pharrell
Дата 24.9.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Есть DBGrid в нем хранятся путь к pdf файлам, их открываю на этой же форме с помощью AcroPDF.Проблема в том что при открытии pdf фокус перескакивает на AcroPDF, что не очень удобно.Приходится кликать по Гриду. Есть ли способ запретить смену фокуса или как вернуть после открытия файла???
PM MAIL   Вверх
Данкинг
Дата 24.9.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



А у AcroPDF есть событие получения фокуса? Если есть, то в нём и возвращай фокус назад на DBGrid. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
pharrell
Дата 24.9.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Не проходит. Тут дело мне кажется даже не в фокусе, открывается pdf при этом создается новый процесс и переключение на него...Или может я чего-то не понимаю))
PM MAIL   Вверх
dumb
Дата 24.9.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



а какой смысл открывать pdf не переводя на него фокус?
сделай форме FormStyle = fsStayOnTop - фокус с pdf'а уходить не будет, но форма будет видна.
PM MAIL   Вверх
pharrell
Дата 25.9.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



смысл в том чтобы сделать предпросмотр документа, т.е. фактически и не нужно открывать его.А из компанентов только AcroPDF знаю.А фокус наоборот с DBGrid уходить не должен.
PM MAIL   Вверх
dumb
Дата 26.9.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



а. понял. проблема в слишком активном захвате фокуса этим компонентом.

если не нужно управление pdf'ом, то наименьшим "головняком" будет просто сделать AcroPDF1->Enabled = false
если нужно хотя бы полистать, то можно управлять через   AcroPDF1->gotoNextPage(), AcroPDF1->gotoPreviousPage()
а если немого заморочиться, то можно сделать возможность управления:
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "AcroPDFLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
HHOOK hHookMC = 0;
//---------------------------------------------------------------------------
LRESULT CALLBACK LowLevelMouseProc(int code, WPARAM wParam, LPARAM lParam)
{
  HWND hWnd = Form1->Handle;
  if (code == HC_ACTION && wParam == WM_MOUSEMOVE && GetForegroundWindow() == hWnd)
  {
    MSLLHOOKSTRUCT *ms = reinterpret_cast<MSLLHOOKSTRUCT *>(lParam);
    TPoint pt = ms->pt;
    ScreenToClient(hWnd, &pt);
    static TWinControl *ac = 0;
    TRect r = Form1->AcroPDF1->BoundsRect;
    if (pt.x > r.left && pt.x < r.right && pt.y > r.top && pt.y < r.bottom)
    {
      if (!ac)
      {
        ac = Form1->ActiveControl;
        Form1->AcroPDF1->Enabled = true;
      }
    }
    else
    {
      if (ac)
      {
        Form1->AcroPDF1->Enabled = false;
        Form1->ActiveControl = ac;
        ac = 0;
      }
    }
  }
  return CallNextHookEx(0, code, wParam, lParam);
}
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  hHookMC = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)LowLevelMouseProc, GetModuleHandle(0), 0);
  ListBox1->Items->Add("1.pdf");
  ListBox1->Items->Add("2.pdf");
  ListBox1->Items->Add("3.pdf");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
  int idx = ListBox1->ItemIndex;
  if (idx == -1) return;
  AcroPDF1->Enabled = false;
  AcroPDF1->LoadFile(WideString(ListBox1->Items->Strings[idx]));
  AcroPDF1->setView (L"Fit");
  AcroPDF1->setShowToolbar(false);
//  AcroPDF1->setShowScrollbars(false);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  UnhookWindowsHookEx(hHookMC);
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.