Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Порядок событий при создании и показе окна   Найти похожие ветки 

 
BOA_KAA ©   (2002-11-03 18:01) [0]

Насколько я помню, эти самые события происходят так:
OnCreate, OnShow, OnPaint, OnActivate, OnResize при создании окна и возвращаемся к OnPaint при его перерисовке... (поправьте, если ошибаюсь).

Если так, то почему не работает следующий код?

procedure TfmMain.FormCreate(Sender: TObject);
begin
bnPaste.Enabled:=False;
if Clipboard.HasFormat(CF_PICTURE) then
bnPaste.Enabled:=True;
end;

procedure TfmMain.bnPasteClick(Sender: TObject);
begin
imPict.Picture.Assign(Clipboard);
end;

procedure TfmMain.FormActivate(Sender: TObject);
begin
if Clipboard.HasFormat(CF_PICTURE) then
bnPaste.Enabled:=True;
end;

procedure TfmMain.bnClearClick(Sender: TObject);
begin
Clipboard.Clear;
bnPaste.Enabled:=False;
end;


Я думаю понятно, что тут делается... Если окно теряет фокус, а потом приобретает его, то сканируется Clipboard на предмет наличия в нем рисунка. То же самое делается при OnCreate.
Так вот если до создания формы в Clipboard"е есть рисунок, то все нормально, а если окно теряет фокус, копирую рисунок, показываю свое окошко, то нифига (извините) не получается.

ЧТО ЗА ДЕЛА?
Заранее благодарю!


 
TTCustomDelphiMaster ©   (2002-11-03 18:45) [1]

Используйте Application.onActivate вместо Form.onActivate

А правильно это делается так:

McSimm © (10.07.02 10:06)
Есть техника, позволяющая отслеживать изменения Clipboard. Для этого надо
1. Зарегистрировать свое окно в цепочке ClipboardChain
2. Выполнять необходимые действия по передаче сообщений по цепочке
3. Удалить свое окно из цепочки.

Пример :
procedure TForm1.FormCreate(Sender: TObject);
begin
// Регистрируемся и запоминаем соседа
Hn := SetClipboardViewer(Handle)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// Удаляем себя из списка
ChangeClipboardChain(Handle, Hn);
end;
procedure TForm1.ChangeCBChain(var Message: TWMChangeCBChain);
begin
// Обрабатываем событие изменения очереди
if Message.Remove = Hn then Hn := Message.Next
else
if Hn <> 0 then // передаем по цепочке
SendMessage(Hn, Message.Msg, Message.Remove, Message.Next);
Message.Result := 0
end;
procedure TForm1.DrawClipboard(var Message: TWMDrawClipboard);
begin
//Обрабатываем изменения в Clipboard
Button1.Enabled := IsClipboardFormatAvailable(CF_TEXT);
if Hn <> 0 then // передаем по цепочке
SendMessage(Hn, Message.Msg, 0, 0)
end;



 
BOA_KAA ©   (2002-11-03 19:22) [2]

Спасибо, попробую!



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
14-46082
al_
2002-10-24 23:59
2002.11.14
Начинающему про dbf or Базы Данных


1-45973
DKalinin
2002-11-03 16:23
2002.11.14
почему ToolButton при задании ему свойства Action становится недо


3-45697
SlimBoy
2002-10-28 11:37
2002.11.14
Преобразование строки в дату и время


1-45836
Андрусь
2002-11-04 19:23
2002.11.14
Как создать форму с помощью API функций


1-45867
Svetlana
2002-11-05 14:30
2002.11.14
Как перебросить исходники и форму из Delphi6 в Delphi5?