![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Захотелось мне сделать что-то типа как в win10 NotifycationCenter.. 
		
	
		
		
		
		
		
	
		
		
	
	
	У меня Win7, тут нет никакого NotifycationCenter... Хочу что бы программа висела в трее, и имела возможность принимать integer, string, и иконку передаваемой программы.. К примеру написал я программу для скачивания файла, после скачивания программа посылает сообщение в центр уведомлений, а уже центр уведомлений показывает оповещение.. Что посоветуете использовать? Как правильно подойти к этому?  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Если надо сохранять сообщения, то придется писать свой центр сообщений. 
		
	
		
		
		
		
		
	
		
		
	
	
	А если просто показать, то пользоваться функцией ShowBalloonHint компонента TTrayIcon. Если у тебя нет этого компонента (например, в Delphi 7), то ищи компонент TCoolTrayIcon (именно на основе этого компонента в последних версиях Delphi сделан встроенный TTrayIcon). Кстати, этот хинт в Windows 10 появится в Notification Center. Ну а если хочется полного управления, то придется писать что-то полностью свое. Перекрывать отрисовку окна, в том числе появление, исчезновение и весь функционал, который тебе нужен.  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Мне не нужно взаимодействие с системой и системными событиями... Нужна связь между программами(моими проектами) с основной программой, которая будет принимать от них некие сообщения, уведомления... К примеру вместо showmessage(); посылать сообщения основной программе, что бы она вывела его. Как она будет выводить его - дело 10-е )) У меня проблема с связью этих программ с основной. Я понимаю что надо как-то взаимодействовать, но как - не знаю. Вот и прошу совета) какой инструмент для этого использовать? Но при этом нужно что бы главная форма могла получить иконку программы которая посылает ей сообщение. Последний раз редактировалось Gareth, 25.01.2022 в 00:15.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Пока сделал такой вариант: 
		
	
		
		
		
		
		
		
			программа посылающее сообщение [центру уведомлений] Код: 
	const
  CMD_SETLABELTEXT = 1; // Задаем ID команды 
....
.....
function Notify_Send(EXE_PATH, aMESSAGE: string): Boolean;
var
  CDS: TCopyDataStruct;
  SUPER_MESSAGE: string;
begin
  SUPER_MESSAGE := '[' + EXE_PATH + '] ' + '[' + aMESSAGE + ']'; // склеиваем информацию в одну строку
  { ---------------------------------------------------- }
  CDS.dwData := CMD_SETLABELTEXT; // Устанавливаем тип команды
  CDS.cbData := Length(SUPER_MESSAGE) + 1; // Устанавливаем длину передаваемых данных
  GetMem(CDS.lpData, CDS.cbData); // Выделяем память буфера для передачи данных
  try
    StrPCopy(CDS.lpData, AnsiString(SUPER_MESSAGE)); // Копируем данные в буфер
    // Отсылаем сообщение в окно с заголовком MyNotifyCentr_BKF
    SendMessage(FindWindow(nil, 'MyNotifyCentr_BKF'), WM_COPYDATA, Form1.Handle, Integer(@CDS));
  finally
    FreeMem(CDS.lpData, CDS.cbData); // Высвобождаем буфер
  end;
end;Программа центр уведомлений, которая принимает сообщения Код: 
	  
private
  // Обработчик сообщения WM_COPYDATA
    procedure WMCopyData(var MessageData: TWMCopyData); message WM_COPYDATA;
.......
......
const
  CMD_SETLABELTEXT = 1;
.......
......
procedure TForm1.WMCopyData(var MessageData: TWMCopyData);
begin
  // Устанавливаем свойства метки, если заданная команда совпадает
  if MessageData.CopyDataStruct.dwData = CMD_SETLABELTEXT then
  begin
    // Устанавливаем текст из полученных данных
    sLabel1.Caption := PAnsiChar((MessageData.CopyDataStruct.lpData));
    MessageData.Result := 1;
  end
  else
    MessageData.Result := 0;
end;посылать в окно сообщение, в котором путь к exeшнику который посылает сообщение, и само сообщение.. В программе которая принимает сообщения, я беру путь к exeшнику и получаю его иконку с помощью ExtractAssociatedIcon. Есть ли еще какие-либо способы? Последний раз редактировалось Gareth, 25.01.2022 в 01:53.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Тему можно закрывать, за ночь сделал всё что хотел. 
		
	
		
		
		
		
		
	
		
		
	
	
	Метод описанный выше устраивает) ![]()  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну извини, не понял вопрос. 
		
	
		
		
		
		
		
	
		
		
	
	
	В прнципе, да, WM_COPYDATA именно для подобного и предназначено. Еще можно регистрировать свое сообщение и потом рассылать его всем: Код: 
	WndMessage := RegisterWindowMessage(PChar(GetMessageName)); ... PostMessage(HWND_BROADCAST,WndMessage,0,0); ЗЫ. GetMessageName - это моя функция, которая генерирует некоторое "уникальное" имя сообщения (униальное для сессии пользователя). Для понимания, если 2 программы вызовут RegisterWindowMessage с одинаковым именем, то они получат один и тот же идентификатор для зарегистрированного сообщения.  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
Gareth (26.01.2022)
  | ||