Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
8-46012
MOleg
2002-07-24 19:11
2002.11.14
DirectX и Delphi6.


1-45863
mikl2002
2002-11-05 15:05
2002.11.14
Путь и Dll


14-46116
Yakudza
2002-10-27 18:06
2002.11.14
Расширения стран.


3-45706
_ALEX70_
2002-10-23 15:01
2002.11.14
Запрос в хронимой процедуре


3-45673
I_S_
2002-10-28 09:23
2002.11.14
Работа с несколькими таблицами.




   Наверх