Последняя версия DataExpress 3 beta от 15 сентября 2020 года.

Изображение Скачать | Изображение Что нового?



Объявление:

Если вам понравилась программа и вы ее интенсивно используете - замолвите словечко о ней на вашем сайте (блоге, форуме, твитере, краской на подъезде, ютуб-канале и т.д.) с активной (по-возможности) ссылкой на сайт программы/форум. Тем самым вы можете внести небольшой вклад в seo-карму проекта в виде входящих ссылок.
Спасибо! Администрация :)


>> Обсудить <<

Системный трэй.

Предложения по новому функционалу и развитию существующего.
Morozbl4
Интересующийся
Сообщения: 227
Зарегистрирован: 04 дек 2019, 11:04
Благодарил (а): 111 раз
Поблагодарили: 11 раз

Системный трэй.

Сообщение Morozbl4 » 07 фев 2020, 11:33

Неплохо было бы предусмотреть возможность сворачивания в трэй.

Аватара пользователя
Develop-Soft
Сообщения: 1733
Зарегистрирован: 05 мар 2019, 18:09
Благодарил (а): 122 раза
Поблагодарили: 470 раз
Контактная информация:

Системный трэй.

Сообщение Develop-Soft » 07 фев 2020, 12:56

Она есть, только надо кодить расширение...

Morozbl4
Интересующийся
Сообщения: 227
Зарегистрирован: 04 дек 2019, 11:04
Благодарил (а): 111 раз
Поблагодарили: 11 раз

Системный трэй.

Сообщение Morozbl4 » 11 фев 2020, 15:57

Скрыл окно программы, так что стало видно только из диспетчера задач))) назад не разворачивается)

Код: Выделить всё

Application.MainForm.Hide; 

TTrayIcon насколько понимаю будет работать только если иконку куда-то приложить отдельно?

Vofka18
Знаток
Сообщения: 456
Зарегистрирован: 04 мар 2018, 16:54
Благодарил (а): 44 раза
Поблагодарили: 48 раз

Системный трэй.

Сообщение Vofka18 » 11 фев 2020, 16:19

Morozbl4 писал(а):Скрыл окно программы, так что стало видно только из диспетчера задач))) назад не разворачивается)

Код: Выделить всё

Application.MainForm.Hide; 

TTrayIcon насколько понимаю будет работать только если иконку куда-то приложить отдельно?

Вот как я реализовал иконку в трее. Только надо предусмотреть чтоб она удалялась при закрытии, а то так и будет висеть в трее.

Код: Выделить всё

const
  TrayIcoStr1 =' тут хранить иконки ';
  TrayIcoStr2 =' тут хранить иконки ';
  TrayIcoStr3 =' тут хранить иконки ';
var
  tIco:TTrayIcon;
  TrayPopup:TPopupMenu;
 
procedure IcoCreate();
var
  SS: TStringStream;
  myIcon:tIcon;
  Img: TdxImage;
  MI: TMenuItem;
begin
   //Load the tray icons.
  tIco:=TTrayIcon.create(nil);
  tIco.Icons := TImageList.Create(nil);

  MyIcon := TIcon.Create;
  SS := TStringStream.Create(DecodeBase64(TrayIcoStr3, False));
  MyIcon.LoadFromStream(SS);
  tIco.Icon.Assign(MyIcon);

  Img := TdxImage.Create(nil);
  SS := TStringStream.Create(DecodeBase64(TrayIcoStr1, False));
  Img.LoadFromStream(SS);
  //img.LoadFromFile('D:\Вова\DOWNLOAD\2.ico');
  tIco.Icons.Add(img.bitmap,nil);

  Img := TdxImage.Create(nil);
  SS := TStringStream.Create(DecodeBase64(TrayIcoStr3, False));
  Img.LoadFromStream(SS);
  //img.LoadFromFile('D:\Вова\DOWNLOAD\2.ico');
  tIco.Icons.Add(img.bitmap,nil);

  SS := TStringStream.Create(DecodeBase64(TrayIcoStr2, False));
  Img.LoadFromStream(SS);
  //img.LoadFromFile('D:\Вова\DOWNLOAD\22.ico');
  tIco.Icons.Add(img.bitmap,nil);

  Img := TdxImage.Create(nil);
  SS := TStringStream.Create(DecodeBase64(TrayIcoStr3, False));
  Img.LoadFromStream(SS);
  //img.LoadFromFile('D:\Вова\DOWNLOAD\2.ico');
  tIco.Icons.Add(img.bitmap,nil);

  // Set up a hint message and the animation interval.
  tIco.Hint := 'DataExpress Оповещания';
  tIco.AnimateInterval := 200;
  tIco.Animate:=true;

   //Set up a hint balloon.
  tIco.BalloonTitle := 'DataExpress Оповещания';
  tIco.BalloonHint :=
    'Оповещаний нет';
  tIco.BalloonFlags := bfInfo;
  tIco.BalloonTimeOut:=10000;
  tIco.ShowBalloonHint();

  tIco.visible:=true;
  tIco.ShowIcon:=true;


  TrayPopup := TPopupMenu.Create(tIco);

  MI := TMenuItem.Create(TrayPopup);
  MI.Caption := 'Добавить напоминание';
  //MI.OnClick := @Rem_AddBtnClick;
  TrayPopup.Items.Add(MI);

  MI := TMenuItem.Create(TrayPopup);
  MI.Caption := 'Перейти к форме';
  //MI.OnClick := @Rem_GoToFormBtnClick;
  TrayPopup.Items.Add(MI);

  MI := TMenuItem.Create(TrayPopup);
  MI.Caption := '-';
  TrayPopup.Items.Add(MI);

  tIco.PopUpMenu:=TrayPopup;

  ss.free;
  img.free;
  MyIcon.free;
end;

procedure onClose (Sender: TObject);
begin
  tico.free;
end; 

Morozbl4
Интересующийся
Сообщения: 227
Зарегистрирован: 04 дек 2019, 11:04
Благодарил (а): 111 раз
Поблагодарили: 11 раз

Системный трэй.

Сообщение Morozbl4 » 11 фев 2020, 16:35

Vofka18 писал(а):Вот как я реализовал иконку в трее. Только надо предусмотреть чтоб она удалялась при закрытии, а то так и будет висеть в трее.

Да, я уже увидел, спасибо!)
Да пусть висит, тут основное - чтобы при нажатии на закрытие база не закрывалась, а просто с глаз исчезала %)

Vofka18
Знаток
Сообщения: 456
Зарегистрирован: 04 мар 2018, 16:54
Благодарил (а): 44 раза
Поблагодарили: 48 раз

Системный трэй.

Сообщение Vofka18 » 11 фев 2020, 16:49

Morozbl4 писал(а):
Vofka18 писал(а):Вот как я реализовал иконку в трее. Только надо предусмотреть чтоб она удалялась при закрытии, а то так и будет висеть в трее.

Да, я уже увидел, спасибо!)
Да пусть висит, тут основное - чтобы при нажатии на закрытие база не закрывалась, а просто с глаз исчезала %)

А так пробовали в модуле main? Правда надо поразбираться... ну а показывать через двойной клик по трею.

Код: Выделить всё


procedure close(Sender: TObject; var Action: TCloseAction);
begin
  action:=caMinimize;// или caHide
end; 

procedure Database_Open;
begin
  MainWindow.OnClose:=@close;
end;

Morozbl4
Интересующийся
Сообщения: 227
Зарегистрирован: 04 дек 2019, 11:04
Благодарил (а): 111 раз
Поблагодарили: 11 раз

Системный трэй.

Сообщение Morozbl4 » 11 фев 2020, 17:02

Не, не пробовал)
Программист из меня - как из .... пуля :lol:
что-то совсем простое понимаю, чуть глубже уже нет)

Morozbl4
Интересующийся
Сообщения: 227
Зарегистрирован: 04 дек 2019, 11:04
Благодарил (а): 111 раз
Поблагодарили: 11 раз

Системный трэй.

Сообщение Morozbl4 » 13 фев 2020, 17:41

В общем получилось как-то так:

Код: Выделить всё

var
  tIco:TTrayIcon;
  TrayPopup:TPopupMenu;

procedure open(Sender: TObject);
begin
   Application.MainForm.Show;
   tIco.free;
end;

procedure Close(Sender: TObject);
begin
   tIco.free;
   MainWindow.OnClose;
   MainWindow.Free;
end;

procedure Hide(Sender: TObject; var Action: TCloseAction);
var
  SS: TStringStream;
  myIcon:tIcon;
  Img: TdxImage;
  MI: TMenuItem;
begin
  tIco:=TTrayIcon.create(nil);
  tIco.Icons := TImageList.Create(nil);

  MyIcon := TIcon.Create;
  SS := TStringStream.Create(DecodeBase64(TrayIcoStr1, False));
  MyIcon.LoadFromStream(SS);
  tIco.Icon.Assign(MyIcon);

  Img := TdxImage.Create(nil);
  SS := TStringStream.Create(DecodeBase64(TrayIcoStr1, False));
  Img.LoadFromStream(SS);
  tIco.Icons.Add(img.bitmap,nil);

 // Set up a hint message and the animation interval.
  tIco.Hint := 'DataExpress';
  tIco.visible:=true;
  tIco.ShowIcon:=true;

  TrayPopup := TPopupMenu.Create(tIco);

  MI := TMenuItem.Create(TrayPopup);
  MI.Caption := 'Развернуть';
  MI.OnClick := @open;
  TrayPopup.Items.Add(MI);

  MI := TMenuItem.Create(TrayPopup);
  MI.Caption := '-';
  TrayPopup.Items.Add(MI);

  MI := TMenuItem.Create(TrayPopup);
  MI.Caption := 'Выйти';
  MI.OnClick := @close;
  TrayPopup.Items.Add(MI);

  tIco.PopUpMenu:=TrayPopup;
  tIco.Onclick := @open;
  ss.free;
  img.free;
  MyIcon.free;
  action:=caHide;
end;

procedure Database_Open;
begin
  MainWindow.OnClose :=@Hide;
end;     

Единственное - непонятно срабатывает закрытие приложения по кнопке выйти.

Morozbl4
Интересующийся
Сообщения: 227
Зарегистрирован: 04 дек 2019, 11:04
Благодарил (а): 111 раз
Поблагодарили: 11 раз

Системный трэй.

Сообщение Morozbl4 » 31 мар 2020, 09:14

У пользователя при закрытии базы выкидывает ошибку Access Violation.
В чем проблема может быть? В админке не выдает.

Vofka18
Знаток
Сообщения: 456
Зарегистрирован: 04 мар 2018, 16:54
Благодарил (а): 44 раза
Поблагодарили: 48 раз

Системный трэй.

Сообщение Vofka18 » 31 мар 2020, 10:33

Morozbl4 писал(а):У пользователя при закрытии базы выкидывает ошибку Access Violation.
В чем проблема может быть? В админке не выдает.

Врятли кто-то ответит на столь риторический вопрос...
То что бросилось первым в глаза

Код: Выделить всё

procedure Close(Sender: TObject);
begin
   tIco.free;
   MainWindow.OnClose; // вызываете событие закрытия главного окна
   MainWindow.Free;      // освобождаете память, а вы уверены что она не освободилась в событии OnClose?
end;

И почему именно OnClose?(ИМХО не очень красиво, событие это от слова "Событие", т.е. вызывается когда ему нужно, а не когда захотели вы) ведь есть метод MainWindow.Close()


Вернуться в «Предложения по развитию проекта.»