Текущий архив: 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.45 MB
Время: 0.008 c