Главная страница
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.02 c
3-45770
oomneeq
2002-10-25 15:59
2002.11.14
Конфигурируемый импорт данных


3-45767
Fishka
2002-10-25 13:11
2002.11.14
Директория для временных файлов _SQL....dbf


3-45737
ShooRoop
2002-10-24 15:02
2002.11.14
Проблема с составлением запроса


1-45850
kva
2002-11-05 09:04
2002.11.14
Крыша едет от re-raise


7-46173
Whistler
2002-09-14 14:51
2002.11.14
ОПРЕДЕЛЕНИЕ ТИПА ДИСКЕТЫ