const WM_NOTIFYTRAYICON = WM_USER + 1;
...
private procedure WMTRAYICONNOTIFY(var Msg: TMessage); message WM_NOTIFYTRAYICON;
...
uses ShellAPI;
procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
var s: string;
begin
case Msg.LParam of
WM_MOUSEMOVE: s := 'Мышь сдвинута';
WM_LBUTTONDOWN: s := 'Левая кнопка нажата';
WM_LBUTTONUP: s := 'Левая кнопка отпущена';
WM_LBUTTONDBLCLK: s := 'Два раза нажата левая кнопка';
WM_RBUTTONDOWN: s := 'Правая кнопка нажата';
WM_RBUTTONUP: s := 'Правая кнопка отпущена';
WM_RBUTTONDBLCLK: s := 'Два раза нажата правая кнопка';
else
s := IntToStr(Msg.LParam);
end;
ListBox1.Items.Add(s);
ListBox1.ItemIndex := ListBox1.Items.Count - 1;
end;
procedure TForm1.FormCreate(Sender: TObject);
var tray: TNotifyIconData;
Ic: TIcon;begin
Ic := TIcon.Create;
Ic.LoadFromFile('Icon1.ico');
with tray do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := Ic.Handle;
szTip := ('Это наша иконка');
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));
Ic.Destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
var tray: TNotifyIconData;
Ic: TIcon;
begin
Ic := TIcon.Create;
Ic.LoadFromFile('Icon2.ico');
with tray do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := Ic.Handle;
szTip := ('Это другая иконка');
end;
Shell_NotifyIcon(NIM_MODIFY, Addr(tray));
Ic.Destroy;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var tray: TNotifyIconData;
begin with tray do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Form1.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, Addr(tray));
end;
Влпросы по созданию чата
1. Как сделать, чтобы при свёртывании чат уходил в значок (размещался возле времени справа внизу)?
1. Как сделать, чтобы при свёртывании чат уходил в значок (размещался возле времени справа внизу)?
А если у меня нет компонента TrayIcon и нельзя установить библиотеку с ним?
только что выложил
[quote=prizz] нельзя установить библиотеку с ним?[/quote]
вот что нашел по трею за пару минут в инете
Код:
Сделал с помощью CoolTrayIcons
Как добавить чат в автозагрузку? (программно)
HKEY_CURRENT_USER - для текущего пользователя, HKEY_LOCAL_MACHINE - для всех пользователей.
Код:
uses ShlObj, ComObj, ActiveX;
procedure CreateLink(const PathObj, PathLink, Desc, Param: string);
var
IObject: IUnknown;
SLink: IShellLink;
PFile: IPersistFile;
begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
PFile := IObject as IPersistFile;
with SLink do begin
SetArguments(PChar(Param));
SetDescription(PChar(Desc));
SetPath(PChar(PathObj));
end;
PFile.Save(PWChar(WideString(PathLink)), FALSE);
end;
procedure CreateLink(const PathObj, PathLink, Desc, Param: string);
var
IObject: IUnknown;
SLink: IShellLink;
PFile: IPersistFile;
begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
PFile := IObject as IPersistFile;
with SLink do begin
SetArguments(PChar(Param));
SetDescription(PChar(Desc));
SetPath(PChar(PathObj));
end;
PFile.Save(PWChar(WideString(PathLink)), FALSE);
end;
Код:
var
FolderPath :string;
Registry := TRegistry.Create;
try
Registry.RootKey := HKey_Current_User;
Registry.OpenKey('Software\Microsoft\Windows\'+
'CurrentVersion\Explorer\Shell Folders', False);
FolderName := Registry.ReadString('Startup');
finally
Registry.Free;
end;
FolderPath :string;
Registry := TRegistry.Create;
try
Registry.RootKey := HKey_Current_User;
Registry.OpenKey('Software\Microsoft\Windows\'+
'CurrentVersion\Explorer\Shell Folders', False);
FolderName := Registry.ReadString('Startup');
finally
Registry.Free;
end;
Не подскажете как сделать мигающим строку "внизу"(лучше названия не придумал)? Ну типа как в асе, когда сообщние приходит, строка внизу(:D) мигать начинает, типа активна
добавляешь новую иконку, и по таймеру ее меняешь, а когда WM_LBUTTONDOWN или другое событие, убираешь значок с таскбара. Код см вверху/\
окошку нужно сказать, чтоб он сделал FLASH.... точно не помню чё там да как.... глянь MSDN....
А в WinSock можно, чтоб сервер и клиент был запущен на одной машине? Ну при старте должно быть связывание локальной "адресовой" структуры с сокетом. Но при запущенном сервере, при запуске клиента вылезает ошибка функции bind.
А так, попробуй клиента привязывать на другой порт...
Есть вопросик интересный. А как в например в TMemo или ещё куда добавлять рисунки? ну там смайлики и т.д.
В memo нельзя, используй TRichEdit - туда можно всякого навставлять ;)
Расскажите про сетевой чат поподробнее, плз. Или дайте ссылки, кто может
Книга есть такая - Delphi глазами хакера (ссылка Delphi глазами Хакера.pdf)
Там есть глава 4, п.6, страница 162 - "Чат для локальной сети".
Пытаюсь сделать чтобы комп в сети (глобальной) получил сообщение.
Вот код на сервере. На сервере активируется Сокет и ждет сообщение.
Вот оно долгожданное приходит и тогда......
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:String;
begin
......................
s:= Socket.ReceiveText;
ShowMessage(S);
......................
end;
Socket: TCustomWinSocket);
var
s:String;
begin
......................
s:= Socket.ReceiveText;
ShowMessage(S);
......................
end;
Вот клиентская часть. Вводим IP, набираем сообщение и давим на кнопку отправить......
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
.................................
clientsocket1.Address:=edit1.text;//Воодим IP другого компа
clientsocket1.active:=true;
s:=Memo1.Lines.CommaText; //Тут текст, который хотим отправить
clientsocket1.Socket.SendText(s); //Отправляем
clientsocket1.active:=false;
..................................
end;
var
s:string;
begin
.................................
clientsocket1.Address:=edit1.text;//Воодим IP другого компа
clientsocket1.active:=true;
s:=Memo1.Lines.CommaText; //Тут текст, который хотим отправить
clientsocket1.Socket.SendText(s); //Отправляем
clientsocket1.active:=false;
..................................
end;
Думал будет работать, ан нет!
Говорит "Asyncronous socket error 10060", чё делать? Где баги?
я сам натыкался на эти грабли. но щас не помню как надо писать. вообще, там ничего сложно нету. просто почитай доки -- так всё это есть!!!
Проверь свойства ServerType и Client type. А вообще ошибка 10060 -сервер не отвечает.
Если да, то какой ип использовать,а то их навалом и не какой не работает!!! :mad: