|
Вопрос # 2 419/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Есть исходники разработанные с компонентом CoolTrayIcon на дельфи7, по некоторым причинам не могу использовать эту версию и работаю на 2009.
Есть ли какая возможность установки новой версии CoolTrayIcon (и есть ли она вообще) для дельфи 2009? Может альтернатива какая имеется?
Ибо на 2009 не компилируется.
Сам я начинающий программист (буквально неделя изучения).(
Разрабатываем программу с другом, с моей стороны теперь не получается никакой работы... Помогите пожалуйста.
 |
Вопрос задал: 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] [Следующая »]
|
Вадим К (статус: Академик), 15 февраля 2009, 04:24 [#1]:
Если немножко постараться, то всё компилируется. Более того, здесь уже в вопросах было о данном компоненте и человеку удалось скомпилировать.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Northwind (статус: Посетитель), 15 февраля 2009, 11:17 [#2]:
а можно ссылочку на этот вопрос?
я тут просто пока слабо ориентируюсь.
|
|
Вадим К (статус: Академик), 15 февраля 2009, 20:40 [#3]:
to Виталий
7 делфи отлично запускается под вистой. Сам запускал.
И вообще, формат Вашего ответа какой то жесткий.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 15 февраля 2009, 21:26 [#4]:
to Белояр. Ачем вам не нравится стандартный TrayIcon. Лично я с его помощью добивался тех же эфектов, что и с CoolTrayIcon. TrayIcon есть в делфи 2009 и компилиться будет нормально без ошибок... Согласен, что покопаться придется, исходники немного поменять...
|
|
Northwind (статус: Посетитель), 16 февраля 2009, 01:08 [#5]:
Ув. Ученый, а можно готовый код для стандартного TrayIcon?
Просто так как я совсем уж начинающий, очень интересно было бы поглядеть реализацию. В жизни пригодится.
|
|
Northwind (статус: Посетитель), 16 февраля 2009, 01:13 [#6]:
немного не сюда, но чтоб не создавать новой темы, хотел спросить.
компилятор выдает сообщение:
[DCC Warning] Unit1.pas(53): W1002 Symbol 'FindData' is specific to a platform
сама строка 53:
result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow)
как это можно починить? или не стоит обращать внимание?
|
|
Вадим К (статус: Академик), 16 февраля 2009, 03:15 [#7]:
Компилятор предупредил, что данная структура "специфична для платформы". Ну к примеру он может ругаться, если использовать функцию, которая добавляет слеш в конец строки, что она платфоменно независимая... Но даже включая Севен, она будет работать правильно, потому что в винде все всегда пока что был разделитель для папок "\". А вот под Линуксом он наоборот. Но в дань Киликсу, делфи ругается.
То есть, эту можно игнорировать либо поискать структуру более подходящую...
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Тов. Женька (статус: 3-ий класс), 16 февраля 2009, 10:28 [#8]:
Если не ошибаюсь, компонент Tray Icon (как уже встроенный) имеется в Delphi с версии 2006, (по крайней мере в Turbo Delphi я его видел). Может имеет смысл воспользоваться им?
|
|
Вадим К (статус: Академик), 16 февраля 2009, 11:31 [#9]:
Встренные компоненты хороши тем, что у других людей будет тоже "компилироваться". Не все ведь любят доустанавливать компоненты. Некоторым религия не позволяет, у некоторых могут быть конфликты с уже установленными.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ученый (статус: 8-ой класс), 16 февраля 2009, 11:37 [#10]:
to Белояр. Можно и код, но только позже....приду с занятий напишу...если конечно вопрос еще буде актуальным
|
|
Northwind (статус: Посетитель), 16 февраля 2009, 20:26 [#11]:
Ага, спасибо.
|
|
Northwind (статус: Посетитель), 16 февраля 2009, 21:46 [#12]:
гм, я вот не понял как поставить в ImageList1 хоть одну иконку, не говоря о нескольких...
подскажите, как?
p.s. может кто знает, где скачать книгу по дельфи 2009 для новичков?
|
|
Northwind (статус: Посетитель), 16 февраля 2009, 22:08 [#13]:
почему то еще выдает ошибку в этой строке:
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
|
|
Тов. Женька (статус: 3-ий класс), 17 февраля 2009, 08:31 [#14]:
1. Как добавить иконки в ImageList.
В ImageList используются изображения размером, как правило, 16x16 точек. Цвет, которым окрашена левая нижняя ячейка, будет автоматом вырезан из всех иконок. Единственное, изображения, по-моему, не должны иметь более 24 бит, в этом случае с вырезанием фона проблем не будет.
Собственно добавление. Нажимаем правой кнопкой мышки на компоненте ImageList1 (можно и двойным кликом открыть). В контекстном меню видим "Edit ImageList...", там же видим "16 х 16 Images" и "32 х 32 Images". Тут, думаю, объяснять не надо. Не советовал бы выставлять "32х32...", хотя... посмотрите сами!
В открывшемся диалоговом окне нажимаем кнопку "Add..." и далее выбираем нужное изображение.
Еще одно важное замечание. Можно заранее создать изображение с несколькими иконками. Следите только чтобы его размеры были кратны 16 или 32.
2. Какую именно ошибку выдает?
|
|
Northwind (статус: Посетитель), 17 февраля 2009, 10:27 [#15]:
[DCC Error] Unit1.pas(105): E2070 Unknown directive: 'TForm1'
[DCC Error] Unit1.pas(110): E2070 Unknown directive: 'TForm1'
[DCC Error] Unit1.pas(115): E2070 Unknown directive: 'TForm1'
[DCC Error] Unit1.pas(151): E2029 ';' expected but end of file found
[DCC Error] Unit1.pas(151): E2029 ';' expected but end of file found
[DCC Error] Unit1.pas(36): E2065 Unsatisfied forward or external declaration: 'TForm1.N4Click'
[DCC Fatal Error] Project1.dpr(6): F2063 Could not compile used unit 'Unit1.pas'
|
|
Тов. Женька (статус: 3-ий класс), 17 февраля 2009, 11:38 [#16]:
Возможно, где-то end не поставлен или наоборот - лишний, теряюсь в догадках.
Желательно полный текст юнита поглядеть, для общей картины.
|
|
Northwind (статус: Посетитель), 17 февраля 2009, 12:04 [#17]:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI, Buttons, Menus, ImgList, ExtCtrls, AppEvnts;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
MainMenu1: TMainMenu;
WSNCP1: TMenuItem;
N2: TMenuItem;
Help1: TMenuItem;
FAQWSN1: TMenuItem;
WSNCP2: TMenuItem;
Label1: TLabel;
Image1: TImage;
PopupMenu1: TPopupMenu;
ImageList1: TImageList;
ApplicationEvents1: TApplicationEvents;
TrayIcon1: TTrayIcon;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure WMMoving(var Msg: TWMMoving); message WM_MOVING;
procedure SpeedButton1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N2Click(Sender: TObject);
procedure FAQWSN1Click(Sender: TObject);
procedure WSNCP2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure ApplicationEvents1Minimize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit4;
{$R *.dfm}
function FileSize(fileName : wideString) : Int64;
var
sr : TSearchRec;
begin
if FindFirst(fileName, faAnyFile, sr ) = 0 then
result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow)
else
result := -1;
FindClose(sr) ;
end;
procedure TForm1.WMMoving(var Msg: TWMMoving);
var
workArea: TRect;
begin
workArea := Screen.WorkareaRect;
with Msg.DragRect^ do
begin
if Left < workArea.Left then
OffsetRect(Msg.DragRect^, workArea.Left - Left, 0) ;
if Top < workArea.Top then
OffsetRect(Msg.DragRect^, 0, workArea.Top - Top) ;
if Right > workArea.Right then
OffsetRect(Msg.DragRect^, workArea.Right - Right, 0) ;
if Bottom > workArea.Bottom then
OffsetRect(Msg.DragRect^, 0, workArea.Bottom - Bottom) ;
end;
inherited;
end;
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ShellExecute(Handle,'open','Start server.cmd',nil,nil,0);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ShellExecute(Handle,'open','Stop server.cmd',nil,nil,0);
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
ShellExecute(Handle,'open','Stop server.cmd',nil,nil,0);
ShellExecute(Handle,'open','Start server.cmd',nil,nil,0);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin;
end;
procedure TForm1.N2Click(Sender: TObject);
var
buttonSelected : Integer;
begin
// Отображение диалога с подтверждением
MessageBeep(MB_ICONQUESTION);
buttonSelected := MessageDlg('Завершить текущий сеанс?',mtConfirmation,
mbOKCancel, 0);
// Показ типа выбранной кнопки
if buttonSelected = mrOK then
Application.terminate
else
end;
procedure TForm1.FAQWSN1Click(Sender: TObject);
begin
ShellExecute(Handle, nil, 'http://northwind/smf/index.php/board,43.0.html', nil, nil, SW_RESTORE)
end;
procedure TForm1.WSNCP2Click(Sender: TObject);
begin
form_about.show;
end;
procedure T
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;
|
|
Тов. Женька (статус: 3-ий класс), 17 февраля 2009, 12:20 [#18]:
1.Вижу над третьей процедурой снизу "procedure T". Так в коде и есть?
2. Дважды встречается процедура
"procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
end;"
Уберите лишнюю.
3. Пропущен самый последний end, после него должна стоять точка.
4. Теперь по ошибке "[DCC Error] Unit1.pas(36): E2065 Unsatisfied forward or external declaration: 'TForm1.N4Click'"
У вас в секции type имеется объявление процедуры 'TForm1.N4Click', а сама процедура нигде не расписана. Так что удаляйте эту процедуру из type, и, если надо, пересоздавайте заново.
|
|
Northwind (статус: Посетитель), 17 февраля 2009, 12:36 [#19]:
ага, так и было.
сейчас попробуем убрать.
|
|
Northwind (статус: Посетитель), 17 февраля 2009, 12:49 [#20]:
не получается, тыкаюсь по коду без толку. 
практически ничего не понятно...
убрал пока:
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;
без этого все компилируется.
procedure T тоже удалил, поставил в конце end.
эх...
|
Страницы: [1] [2] [3] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|