Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
Внизtray & screen.cursor Найти похожие ветки
← →
dvndvn © (2011-03-16 18:04) [0]Здравствуйте. Подскажите в чем может быть причина? В программе создается иконка в tray. При выполнении определенной процедуры меняется screen.cursor:=crSQLWait и иконка в tray (deleteicon+createicon). При выходе курсора в taskbar курсор меняется на crDefault. При возвращении на главную форму он
естественно востанавливатся. Но если вызывается хинт иконки програмы, то при возвращении курсора на главную форму, он остается crDefault.
← →
Conflict © (2011-03-16 18:06) [1]Надо код смотреть кто как меняет иконку и курсор
← →
dvndvn © (2011-03-16 18:14) [2]процедура меняющая курсор
procedure TFormMain.ChangeCursor(cursor:Tcursor);
begin
Screen.Cursor:=cursor;
case cursor of
crSQLWait : begin
DeleteTrayIcon;
CreateTrayIcon(2);
end;
crDefault : begin
DeleteTrayIcon;
CreateTrayIcon(1);
end;
crHourGlass: begin
DeleteTrayIcon;
CreateTrayIcon(3);
end;
end;
создаем иконку
procedure TFormMain.CreateTrayIcon(n:Integer);
var nidata : TNotifyIconData;
dopinfo2,dopinfo3 : string;
begin
dopinfo2:=": идет запись в БД. Пожалуйста подождите";
dopinfo3:=": идет чтение страницы. Пожалуйста подождите";
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYICONNOTIFY;
case n of
1 : begin
ImageList.GetIcon(0, Application.Icon);
hIcon := Application.Icon.Handle;
StrPCopy(szTip,Application.Title);
end;
2 : begin
ImageList.GetIcon(13, Application.Icon);
hIcon := Application.Icon.Handle;
StrPCopy(szTip,Application.Title+dopinfo2);
end;
3 : begin
ImageList.GetIcon(12, Application.Icon);
hIcon := Application.Icon.Handle;
StrPCopy(szTip,Application.Title+dopinfo3);
end;
end;
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;
Удаляем иконку
procedure TFormMain.DeleteTrayIcon;
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
примечание: загрузка процессора достигает 100%
← →
Conflict © (2011-03-16 18:21) [3]
> Но если вызывается хинт иконки програмы, то при возвращении
> курсора на главную форму, он остается crDefault.
Откуда такое утверждение?
В приведенном куске кода нет вызова процедуры ChangeCursor и установки хинта иконки.
← →
dvndvn © (2011-03-16 18:31) [4]установка хинта курсора:
StrPCopy(szTip,Application.Title);
или StrPCopy(szTip,Application.Title+dopinfo2);
то есть заполнение поля szTip обекта nidata : TNotifyIconData;
пример вызова процедуры ChangeCursor
procedure GetCellsValue;
var
i,j,k : integer;
FlagLS : Boolean;
begin
FormMain.ChangeCursor(crSQLWait);
← →
Conflict © (2011-03-17 11:12) [5]Откуда информация, что курсор зависит от хинта иконки?
Т.е. если задизеблить StrPCopy в процедуре CreateTrayIcon, то процедура изменения курсора ведет себя нормально?
← →
dvndvn © (2011-03-17 18:45) [6]Когда я писал "При выходе курсора в taskbar курсор меняется на crDefault." то имелось ввиду, что курсор меняет Windows, в программе в это время курсор не изменяется. Если не наезжать на свою иконку, то Windows востанавливает текущее значение курсора, а после наезда, при возвращении курсора на главную форму программы, на свою иконку на экране остаётся crDefault, хотя в програме вэто время значение курсора crSQLWait
← →
Conflict © (2011-03-18 10:03) [7]Так может проще отлавливать положение курсора на форме и в это время назначать его свойство в какое нужно значение?
← →
Conflict © (2011-03-18 10:05) [8]Для размышления: http://www.cyberguru.ru/delphi-sources/ui-windows/kak-uznat-tchto-kursor-myshi-nad-moej-formoj.html
← →
dvndvn © (2011-03-18 12:19) [9]Спасибо за помощь и за ссылку. Просто в это время FireBird забирает 100% процессора, а при срабатывании Application.OnHint проводник похоже глючит.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c