Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите отловить сообщение, Запретить форме менять фокус 
V
    Опции темы
Antony41
Дата 2.3.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте вобщем нужно сделать пока вот такое окошко
user posted image
чтобы его границы могли выходить за рамки главного окна

есть главная форма 

создаю класс окошка в отдельном юните 
Код

  THintForm = class(TForm)
    procedure FormResize(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    class procedure Moving(Rect:TRect);
    class procedure Initialize(var aHintForm: TForm); //процедура инициализации
    class procedure Execute(FColor:TColor); //создание и вывод на экран
    class procedure Close; //Уничтожение
  end;

var
  MainForm : PForm;
  WinControl: PWinControl;
  HintForm: PForm; //Сама форма


Код

//Инициализация и создание
class procedure THintForm.Initialize(var aHintForm: TForm);
begin
  if not Assigned(aHintForm) then
    begin
      HintForm := @aHintForm; //Получаем указатель хинт формы в переменную HintForm
      MainForm := @(Application.MainForm); //Передаём указатель главной формы
      HintForm^ := THintForm.Create(MainForm^); //Создаём хинт форму
    end;
end;


Для показа делаю так
Код

class procedure THintForm.Execute(FColor:TColor);
begin
  //MainForm := @(Application.MainForm);
  //WinControl := OwnerPanel;
  //Assert(Assigned(Application.MainForm));
  //Result := THintForm.Create(MainForm^);
  if not Assigned(HintForm) then
  begin
    Application.MessageBox('Обект не инициализирован!', 'Ошибка', MB_OK + MB_ICONSTOP + MB_TOPMOST);
    Exit;
  end;

  HintForm.Color  := FColor;
  HintForm.Left   := 100;
  HintForm.Top    := 100;
  HintForm.Width  := 100;
  HintForm.Height := 100;
  ShowWindow(HintForm.Handle, SW_SHOWNOACTIVATE);
end;


Чтобы показать окошко из главного окна выполняю так
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
THintForm.Initialize(HForm);
THintForm(HForm).Execute(clYellow);
end;


появляется отлично но при нажатии по нему теряется фокус главного окна, нужно сделать так чтобы в этом окне можно было бы нажимать на контролы, и при этом фокус бы не просто не терялся бы у главного окна а вобще отменял сообщение о его передачи Hint Окошку, но при нажатии на Hint окошко активировалась бы главная форма. Вот такая вот не лёгкая задачка господа))

Это сообщение отредактировал(а) Antony41 - 2.3.2012, 13:12
PM MAIL   Вверх
Antony41
Дата 3.3.2012, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что так никто не поможет я просто хочу написать такой компонент, или как хотя б можно сделать такую форму???
PM MAIL   Вверх
AlekXL
Дата 3.3.2012, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Посмотри на эту мою тему. Там приаттачен сэмпл.
вкратце ты должен для начала перекрыть метод CreateParams хинтового окна
Код

procedure THintForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  with Params do
  begin
    ExStyle := WS_EX_TRANSPARENT;
  end;
end;

это может не полностью решение, но его начало


Цитата(Antony41 @  2.3.2012,  13:09 Найти цитируемый пост)
  HintForm := @aHintForm; //Получаем указатель хинт формы в переменную HintForm

ты хоть понимаешь, что сделал? aHintForm это и есть указатель на экзепляр класса, а не сам класс. В Дельфи переменные типа класс (class) - н-р TForm, TButton - это всегда указатели.
 @aHintForm  - это указатель на указатель, то есть указатель на переменную или поле, которое было использовано для вызова функции.



Это сообщение отредактировал(а) AlekXL - 3.3.2012, 13:10
PM MAIL   Вверх
Antony41
Дата 3.3.2012, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо ща попробуем ну про указатели я знаю главное логика понятна просто неправильно написал
PM MAIL   Вверх
Antony41
Дата 4.3.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



К сожалению это не много не то
мне подошло вот это 
Код

procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;


Код

procedure THintForm.WMNCHitTest(var Message: TWMNCHitTest);
begin
  Message.Result := HTNOWHERE;
end;


Это сообщение отредактировал(а) Antony41 - 5.3.2012, 04:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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