Форум: "Основная";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
ВнизИконка на таскбаре для каждой формы приложения Найти похожие ветки
← →
Enlight (2009-07-22 16:06) [0]Доброго времени суток.
Возникла задача отображения иконки на таскбаре для каждой формы приложения. Очевидное решение в подмене в базовом (моем базовом классе формы) метода CreateParams следующим образом:
procedure TMyCustomForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopwindow;
end;
В таком случае необходимый эффект достигаеться, но взамен возникает следующий артефакт:
Если на форме есть некий контрол у которого есть свойство подсказки
Hint := "Some Hint";
ShowHint := True;
то при наведении указателя мыши на данный объект хинт всплывает, дожидаемся момента убирания хинта, и при переводе указателя мыши за пределы данного контрола или переводе на другой такой же происходит показ главной формы приложения, при чем фокус все таки остается на прежней форме (не переходит на главную).
артефакт нужно заметить, создает ряд неудобств работы с приложением.
Каким образом полечить артефакт или решить сабж не данным методом?
Всем спасибо.
← →
brother © (2009-07-23 04:28) [1]> Каким образом полечить артефакт
это не артефакт.
← →
Enlight (2009-07-27 17:37) [2]А что это в таком случае?
← →
brother © (2009-07-28 07:57) [3]http://ru.wikipedia.org/wiki/%D0%90%D1%80%D1%82%D0%B5%D1%84%D0%B0%D0%BA%D1%82
в компьютерной графике
а у тебя - не верный алгоритм работы программы...
зы Слово красивое?)
← →
Enlight (2009-08-05 12:17) [4]В каком именно месте проявляеться неверность алгоритма? (приводить википедию со словом алгоритм только не нужно, уже ясно что ты умен).
И почему же у меня не артефакт, если следовать приведенным тобою определением?
Артефа́кт (от лат. artefactum — искусственно сделанное) — явление, процесс, предмет, свойство предмета или процесса, появление которого в наблюдаемых условиях по естественным причинам невозможно или маловероятно. Появление артефакта, следовательно, является признаком целенаправленного вмешательства в наблюдаемый процесс, либо наличия неких неучтённых факторов.
← →
brother © (2009-08-05 12:26) [5]> В каком именно месте проявляеться неверность алгоритма?
в 17 строке?
> то при наведении указателя мыши на данный объект хинт всплывает,
> дожидаемся момента убирания хинта, и при переводе указателя
> мыши за пределы данного контрола или переводе на другой
> такой же происходит показ главной формы приложения, при
> чем фокус все таки остается на прежней форме (не переходит
> на главную).
в этом проблемма?
тогда я не понял как это:
> и при переводе указателя мыши за пределы данного контрола
> или переводе на другой такой же происходит показ главной
> формы приложения
активации формы не должно быть, тк явного клика нет...
← →
Enlight (2009-08-06 13:39) [6]
> активации формы не должно быть, тк явного клика нет...
В том то и дело что ее не должно быть, и не происходит. Активной остается все та же форма, но меняеться Z порядок форм, и главная форма приложения оказывается в нем первой. Воспроизведите елементарно описанное приложение и увидите (Делать это стоит только на версиях Делфи выше 5, т.к. в 5 почему-то описаный трюк работает правильно).
← →
n200 (2009-08-06 16:59) [7]
> Воспроизведите елементарно описанное приложение и увидите (Делать это стоит только на версиях Делфи выше 5, т.к. в 5 почему-то описаный трюк работает правильно).
Delphi 7.
Воспроизвёл.
Описанная вами ситуация не возникает.
← →
Enlight (2009-08-10 13:53) [8]Создаем новый проект. Код созданной формы подменяем следующим ниже.
Алгоритм воспроизмедения:
- запускаем
- клик по кнопке
- на новосоданной форме наводим указатель на кнопку до появления хинта
- после появления хинта убираем
- снова наводим до появления хинта и смотрим
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActnList, SrSuccessors;
type
TForm1 = class(TForm)
procedure ButtonClick(Sender: TObject);
private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
{ Protected declarations }
public
procedure AfterConstruction; override;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
if Application.MainForm <> nil then begin
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
end;
procedure TForm1.AfterConstruction;
var
FButton: TButton;
begin
inherited;
Self.KeyPreview := True;
FButton := TButton.Create(Self);
FButton.Parent := Self;
FButton.Top := 30;
FButton.Left := 30;
FButton.Hint := "SomeHint";
FButton.ShowHint := True;
FButton.OnClick := ButtonClick;
end;
procedure TForm1.ButtonClick(Sender: TObject);
var
FForm: TForm;
begin
FForm := TForm1.Create(Application);
FForm.Caption := FForm.Caption + " Created " + DateTimeToStr(Now);
FForm.Show;
end;
end.
ПС: Если в методе CreateParams убираем проверкуif Application.MainForm <> nil then begin
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
то артефакт не воспроизводиться, но на панеле задач иконок приложения больше чем нужно)
← →
dreel (2009-09-30 17:38) [9]Таже самая ситуация, решения пока не нашел.
А две одинаковых закладки на панели задач- не прикольно.
← →
dreel (2009-09-30 18:10) [10]Нашел решение http://qc.embarcadero.com/wc/qcmain.aspx?d=9407
Нужно подменить хендл родительского окна для Hint
type
TFixHintWindow = class(THintWindow)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TFixHintWindow.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := 0; // не привязываем к конкретному окну
end;
При создании формы
procedure TMainForm.FormCreate(Sender: TObject);
begin
HintWindowClass := TFixHintWindow;
// ...
end;
← →
Enlight (2009-10-09 17:58) [11]Спасибо. Так и есть. Проблема то старая) на QC датируется 2004 годом. Странно, что весь инет по запросу как сделать дает такое решение, но при этом я не находил фактов того, что кто-то с проблемой сталкивался.
Еще просмотрю QC, т.к. они утверждают что воспроизвели на Д6-Д7, а еще и на Д2007. Видимо описаную фичу они менять упорно не хотят
← →
Enlight (2009-10-09 19:53) [12]
> т.к. они утверждают что воспроизвели на Д6-Д7, а еще и на
> Д2007
изивините описался, правильно читать: т.к. они утверждают что воспроизвели на Д6-Д7, а я еще и на
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c