Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2012, 10:23   #1
Deleted
 
Регистрация: 05.08.2011
Сообщений: 8
По умолчанию Глюк с таймером на делфи 7

Всем привет.

Пишу одну программу на делфи.И у меня в программе вышел маленкий косяк.

Запускаем программу,сворачиваем в трэй,запускаем делфи пишем в редакторе делфи
например pos и копируем в буфер программа себя показывает,но потом её не возможно свернуть обратно.
все остальные кнопки развернуть закрыть работают, а свернуть нет.
Есть один интерестный момент,если добавить на форму кнопку и на ней написать form1.hide; форма свернется.

Если таймер выключить форма сворачивается.

Код таймера:

Интервал 5000(5 Сек)
Код:

procedure TForm1.TimerTimer(Sender: TObject);

begin

if (FindWindow('TAppbuilder',nil)<>0)and  (Clipboard.AsText<>buff)  then
Begin
    InputComboBox.Text:=ClipBoard.AsText;//Заполняем поисковую строку

   SearchBtn.Click;//Кликаем по кнопке 

buff:=Clipboard.AsText; {присваем переменной buff текст буфера, что бы второй раз условие не выполнилось с этим словом  Clipboard.AsText<>buff }

if Memo1.text<>'' then
Form1.Show;


end;
end;

Последний раз редактировалось Stilet; 04.11.2012 в 11:37.
Deleted вне форума Ответить с цитированием
Старый 04.11.2012, 20:05   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ты, когда форму разворачиваешь, случайно не пишешь там
Код:
Timer1.Enabled:=false
?

Собственно, я даже не очень понял, почему она должна сворачиваться обратно и при чем тут таймер.
Опиши, как по задумке это все работает?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.11.2012, 20:00   #3
Deleted
 
Регистрация: 05.08.2011
Сообщений: 8
По умолчанию

Прошу прощения за долгое молчание.Дома нет интернета сейчас.

По задумке
1 запускаем программу
2 сворачиваем в трей
3 Запускаем Делфи
4 В делфи копируем имя функции или процедуры , у тамера выполняется условие
и происходит все что там написано,то есть если условие тамера выполняется и memo1 <>'' это говорит о том что поиск увенчался успехом показываем форму там мы видем описание этой функции или процедуры ,Посмотрев пытаемся свернуть в трей ,но фиг.Выключения тамера избавляет от этого глюка.Так яснее?


Ты, когда форму разворачиваешь, случайно не пишешь там
Код:


Timer1.Enabled:=false нет,форму показывает тамер Form1.show;

Последний раз редактировалось Deleted; 06.11.2012 в 20:03.
Deleted вне форума Ответить с цитированием
Старый 06.11.2012, 20:14   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Form1.show - это НЕ таймер. Это событие формы.

Думаю, будет лучше, если приложишь исходник к посту - быстрее дело пойдет.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 08.11.2012, 10:27   #5
Deleted
 
Регистрация: 05.08.2011
Сообщений: 8
Хорошо Проблема решена WinApi рулит

Цитата:
Сообщение от Sciv Посмотреть сообщение
Form1.show - это НЕ таймер. Это событие формы.

Думаю, будет лучше, если приложишь исходник к посту - быстрее дело пойдет.
Вопрос закрыт.Эксперементы доказали что такой глюк происходит иза компонента
CoolTray как только вы скомпилируете этот код и запустите блокнот появится форма
свернуть ее нельзя.

Если отправить програму в трей средствамиWinApi(Листинг WinApi внизу поста) WinApi глюка нет.

Листинг CoolTray
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, CoolTrayIcon;

type
  TForm1 = class(TForm)
    CoolTrayIcon1: TCoolTrayIcon;//Свойство minimize to tray := true
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FindWindow('Notepad',nil)<>0 then
Show;
end;

end.

Листинг WinApi
Код:
procedure tray(n: Integer; Icon: TIcon);
var
  Nim: TNotifyIconData;

begin

  with Nim do

  begin

    cbSize := SizeOf(Nim);

    Wnd := Form1.Handle;

    uID := 1;

    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;

    hicon := Icon.Handle;

    uCallbackMessage := wm_user + 1;

  end;

  case n of

    1: Shell_NotifyIcon(Nim_Add, @Nim);

    2: Shell_NotifyIcon(Nim_Delete, @Nim);

    3: Shell_NotifyIcon(Nim_Modify, @Nim);

  end;

end;


procedure TForm1.ControlWindow(var Msg: TMessage);
begin
  if Msg.WParam = SC_MINIMIZE then

  begin

    tray(1, Application.Icon); // Добавляем значок в трей

    //ShowWindow(Handle, SW_HIDE); // Так окно програмы не исчезает
    Form1.Hide; //Так исчезает

  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if FindWindow('Notepad', nil) <> 0 then
    Form1.Show;
end;

end.
Вообщем эту ошибку исправил Спасибо за ответы

Последний раз редактировалось Stilet; 08.11.2012 в 12:02.
Deleted вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с таймером С# JK0 Помощь студентам 1 31.10.2011 16:25
Гаджет с таймером katiakovalchuk Помощь студентам 0 07.05.2011 12:09
Работа с таймером... misher Свободное общение 11 15.07.2010 15:26
Глюк в делфи Kazik Помощь студентам 4 06.06.2010 10:16
Помогите с таймером Михаил Юрьевич Общие вопросы Delphi 10 03.06.2008 20:35