Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 419

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Есть исходники разработанные с компонентом CoolTrayIcon на дельфи7, по некоторым причинам не могу использовать эту версию и работаю на 2009.
Есть ли какая возможность установки новой версии CoolTrayIcon (и есть ли она вообще) для дельфи 2009? Может альтернатива какая имеется?
Ибо на 2009 не компилируется.
Сам я начинающий программист (буквально неделя изучения).(

Разрабатываем программу с другом, с моей стороны теперь не получается никакой работы... Помогите пожалуйста.

Приложение:
  1. Delphi 2009, Windows Vista SP1 x86.


Northwind Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Northwind (статус: Посетитель)
Вопрос отправлен: 15 февраля 2009, 01:31
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Виталий

Здравствуйте, Белояр!

Как я понял, Delphi 7 вы не используйте из-за ошибки, возникающей при запуске в висте.
Для Delphi 2009 часто приходиться переделывать исходники, хедеры библиотек. Это происходит из-за юникода, встроенного в Delphi 2009. Теперь pchar - это юникодная строка, так что чтобы исправить исходники нужно char заменить на ansichar.
Если не поможет, то пишите код ошибки.

А вообще, из-за этих проблем, я перешл обратно в Delphi 7 и не парился, на ошибку пофиг.

Ответ отправил: Виталий (статус: 2-ой класс)
Время отправки: 15 февраля 2009, 14:16

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, Белояр!
Посидел, пофантазировал и собрал версию для 2009 делфи. внутри архива есть dpk файл для неё (искать по 2009). Код компилируется без единой ошибки и вроде даже работает, но оставляю это на Вас.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 15 февраля 2009, 20:37
Оценка за ответ: 5

Комментарий к оценке: Спасибо огромное, будем пробовать.

Ответ #3. Отвечает эксперт: Ученый

Здравствуйте, Белояр! Как и обещал пример работы со стандартным TrayIcon.
Кидаем на форму следующие компоненты: TrayIcon1 (вкладка additional), ApplicationEvents1 (таже вкладка), PopupMenu1(вкладка Standard) и ImageList1 (вкладка win32).
Теперь в свойствах TrayIcon1 выставляем:
Animate-True;
icons-ImageList1;
PopupMenu-PopupMenu1;
Hint-{подсказка, которая отображается при наведении курсора на иконку в трее};
Visible-true;
В ImageList1 загружаем все иконки, которые вам понадобятся.
В PopupMenu1 Прописываем все пункты меню, которые будут отбражаться при клике правой кнопки на значке в трее.
Теперь прописываем следующий код:

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
form1.Hide;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
 Application.Restore();
end;
 
procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
 form1.Show;
end;
Теперь поясню, откуда взяли ApplicationEvents1Minimize. Это событие OnMinimize у компонента ApplicationEvents1.
Вроде и все. Хотя в CoolTrayIcon может есть еще что-то, но не припомню, потому что очень редко его использую....Так что используйте стандартный TrayIcon и не каких проблем не будет :)
Прикрепляю исходник с примером на делфи 2009...


З.Ы. Удачи:))
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 16 февраля 2009, 17:43
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 53; последнее сообщение — 18 февраля 2009, 20:17; участников в обсуждении: 5.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Тов. Женька

Тов. Женька (статус: 3-ий класс), 17 февраля 2009, 13:02 [#21]:

Попробуй убрать в этих процедурах только текст между begin и end, скомпилируй (эти процедуры должны исчезнуть), а потом пересоздай их заново.
И напиши какие ошибки появились теперь.
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 13:16 [#22]:

может ошибка что не в то место размещаю код?
может так определенно куда нужно?
Вадим К

Вадим К (статус: Академик), 17 февраля 2009, 13:26 [#23]:

А "эти процедуры" просто ручками вписываете?
Галочка "подтверждения прочтения" - вселенское зло.
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 13:29 [#24]:

да, накидал на форму компоненты и в конце unit1 разместил код, все как описано в сообщении ув. Ученого.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 17 февраля 2009, 13:35 [#25]:

А какие теперь ошибки?
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 13:42 [#26]:

я тут покопал немного, сделал заново, все как вы писали.
теперь показывает иконку в трее, но также и на панели задач.
т.е. при скрытии не переносится полностью в трей.

ошибки:
[DCC Warning] Unit1.pas(55): W1002 Symbol 'FindData' is specific to a platform
[DCC Warning] Unit1.pas(55): W1002 Symbol 'FindData' is specific to a platform
[DCC Warning] Unit1.pas(132): W1011 Text after final 'END.' - ignored by compiler
Вадим К

Вадим К (статус: Академик), 17 февраля 2009, 13:52 [#27]:

аааа!!!!!
нельзя так. нельзя. Не все процедуры можно просто скопировать и вставить.
в данном случае так надо
для FormShow
нажать на форму, потом F11 (для инспектора объектов). Там перейти на вкладку Events. Найти там OnShow и кликнуть дважды в этой строке. Делфи сделает заготовку. Для Minimaze аналогично.
Для TrayIcon1Click - просто дважды кликнуть по компоненту TrayIcon1
Галочка "подтверждения прочтения" - вселенское зло.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 17 февраля 2009, 14:01 [#28]:

Ну вот! Это уже не ошибки, а предупреждения. В принципе ничего страшного не вижу. А вот по поводу показа на панели задач попробу добавить в процедуру
procedure TForm1.ApplicationMinimize(Sender : TObject);
строку:
ShowWindow(Application.Handle,SW_HIDE);

А в
procedure TForm1.TrayIcon1Click(Sender: TObject);
добавь строку:
SetForeGroundWindow(Application.MainForm.Handle);

Также в эту процедуру можно переместить Application.Restore;
из процедуры TForm1.FormShow... и разместить ее над SetForeGroundWindow(Application.MainForm.Handle);

Т.е. должно примерно быть так:

procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
Application.Restore;
SetForeGroundWindow(Application.MainForm.Handle);
TrayIcon1.Hide;
end;

Должно помочь.
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 14:07 [#29]:

о, получилось))
спасибо огромное всем, надеюсь не сильно достал вопросами. :)
буду обязательно консультироваться на вашем сайте, ибо здесь прекрасные люди и специалисты помогающие новичкам.
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 14:13 [#30]:

буду теперь пробовать добавлять кнопку скрытия в меню "файл".
Ученый

Ученый (статус: 8-ой класс), 17 февраля 2009, 20:36 [#31]:

Интересно, а для кого исходник примера :)
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 21:51 [#32]:

эмм, тут опять вопросик есть)
как убрать пунктирную рамку вокруг кнопок?
Вадим К

Вадим К (статус: Академик), 17 февраля 2009, 22:48 [#33]:

А зачем? это фокус ввода. Некоторые люди за её отсутсвие могут программу и выбросить. Можно конечно убрать фокус с кнопки, но когда её будете нажимать, он там будет.
Галочка "подтверждения прочтения" - вселенское зло.
Northwind

Northwind (статус: Посетитель), 17 февраля 2009, 23:13 [#34]:

да просто картинку портит, некрасиво. ну да ладно с ним.

а как можно переименовать слово Confirm в окне предупреждения о выходе из программы?
Вадим К

Вадим К (статус: Академик), 18 февраля 2009, 00:11 [#35]:

подтвердить?
Галочка "подтверждения прочтения" - вселенское зло.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 18 февраля 2009, 08:25 [#36]:

Попробуй вместо MessageDlg использовать MessageBox, вот так:
MessageBox(0, 'Сохранить изменения?', PСhar(Application.Title), mb_YesNoCancel+mb_iconWarning)
Northwind

Northwind (статус: Посетитель), 18 февраля 2009, 15:31 [#37]:

не, там уже есть // Отображение диалога с подтверждением
MessageBeep(MB_ICONQUESTION);
buttonSelected := MessageDlg('Завершить текущий сеанс?',mtConfirmation,
mbOKCancel, 0);
мне нужно переименовать именно title этого окна...
Тов. Женька

Тов. Женька (статус: 3-ий класс), 18 февраля 2009, 16:04 [#38]:

Ну так и подставь вместо
MessageDlg('Завершить текущий сеанс?',mtConfirmation, mbOKCancel, 0);
вот это:
MessageBox(0, 'Завершить текущий сеанс?', PСhar('пиши сюда все, что хочешь!'), mb_OkCancel+mb_iconQuestion)
Northwind

Northwind (статус: Посетитель), 18 февраля 2009, 16:17 [#39]:

[DCC Error] Unit1.pas(150): E2034 Too many actual parameters
[DCC Error] Unit1.pas(150): E2010 Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'PWideChar'
[DCC Error] Unit1.pas(42): E2065 Unsatisfied forward or external declaration: 'TForm1.PСhar'
[DCC Fatal Error] Project1.dpr(6): F2063 Could not compile used unit 'Unit1.pas'
ошибки выдает
Northwind

Northwind (статус: Посетитель), 18 февраля 2009, 16:25 [#40]:

подставил вместо того, что было:

[DCC Error] Unit1.pas(149): E2003 Undeclared identifier: 'PСhar'
[DCC Error] Unit1.pas(151): E2066 Missing operator or semicolon
[DCC Fatal Error] Project1.dpr(6): F2063 Could not compile used unit 'Unit1.pas'

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:16
Выполнено за 0.03 сек.