Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MESSAGE+TIMER, MESSAGE+TIMER 
:(
    Опции темы
avosi
Дата 11.3.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Надо сделать мессагу с таймером, после истечения указанного в таймере времени надо нажать на требуемую кнопку и т.д. т.п.
PM MAIL   Вверх
MetalFan
Дата 11.3.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(avosi @  11.3.2008,  13:56 Найти цитируемый пост)
мессагу с таймером

выводим новый вид сообщений?!


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
avosi
Дата 11.3.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Да надо выдать сообщение и по истечению определенного времени нажать YES или NO. ВСЕ.
Отсчет до 0 желательно чтоб был виден.
PM MAIL   Вверх
Rodman
Дата 11.3.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  MessageDlg('My Mess', mtWarning, [mbOK], 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval:=150000;
  Timer1.Enabled:=True;
end;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
MetalFan
Дата 11.3.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



о, я не про ту мессагу понял из первого поста)
я такое делал просто:
на форме есть таймер с интервалом 1 сек.
есть поле FCounter: Integer
которое при создании формы устанавливается в N секунд.
при каждом срабатывании таймера
FCounter уменьшается на 1 и проверяется, равен ли он нулю.
ну и соотв если равен, то делаем нужные действия, например "жмем" кнопку или закрываем форму


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
avosi
Дата 13.3.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



Все не то. Надо конкретно чтобы появлялось сообщение и через определенное время оно закрылось само по себе.(Например по таймеру) в С++ есть отдельная компонента по моему Qmessage или типо того, которая позваляет реализовать эту возможность. А в делфи этого нет наверно
PM MAIL   Вверх
MetalFan
Дата 13.3.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



что не то? а я тебе что описал? ты бы хоть вдумался.
это пишется за 2 минуты 5ю строками кода. нафиг какойто компонент нужен?
нужно:
1. TTimer с интервалом в 1000мсек (Tmr)
2.  Целочисленное поле класса для счетчика (FCounter)
3. TLabel для отображения оставшихся секунд (Lbl)
Код

   TSomeForm = class( TForm ) 
      Tmr: TTimer;
      Lbl: TLabel;
...
  private
    FCounter: Integer; 
   
  end;
...
  procedure TSomeForm.OnCreate( Sender: TObject );
  begin

    Tmr.Interval := 1000; //это можно 
    Tmr.Enbled := true;    //выставить в дезайне

    FCounter := 30; /// 30 секунд например надо
    Lbl.Caption := IntToStr(FCounter);  
...
  end;
  
  procedure TSomeForm.TmrOnTimer( Sender: TObject );
  begin
    dec( FCounter );
    Lbl.Caption := IntToStr(FCounter);  
    if FCounter = 0 then Close;
  end;
...  



Это сообщение отредактировал(а) MetalFan - 13.3.2008, 12:15


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
VICTAR
Дата 13.3.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



PM MAIL   Вверх
MetalFan
Дата 13.3.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



VICTAR, та функция по ссылке недокументированная, и закладываться на нее имхо не стоит... а вдруг ее вообще уберут?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
avosi
Дата 13.3.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 15.11.2007

Репутация: нет
Всего: нет



пасибо VICTAR   smile ,  мне годик назад ее дали заценить и больше я её не пользовался и забыл совсем про нее хотя знал что чтото такое должно быть
PM MAIL   Вверх
VICTAR
Дата 13.3.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



MetalFan, все может быть... Ничто не вечно  smile 
PM MAIL   Вверх
Rrader
  Дата 14.3.2008, 14:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



Накидал примерчик: smile Показывает как сделать доступ к MessageBox и его детям.
Код

Program WinAPI;

{$R *.res}

Uses
  Windows, Messages;

Const
  ButtonID = 100;

Var
  Btn: THandle;
  MainWnd: THandle;
  SetWProc: Boolean = False;
  OldProc: Integer = 0;
  Interval: Integer;

Procedure InitCommonControls; Stdcall; External 'comctl32.dll';

Procedure BtnTimerProc(HWnd: THandle; Msg, IDEvent, Time: Cardinal); Stdcall;
Var
  T1, T2: String;
Begin
  Str(Interval, T1);
  Dec(Interval);
  T2 := 'OK (' + T1 + ')';
  SetWindowText(HWnd, PChar(T2));
  If Interval < 0 Then
  Begin
    KillTimer(HWnd, 125); 
    SendMessage(GetParent(HWnd), WM_CLOSE, 0, 0);
  End;
End;

Function MsgWinProc(HWnd: THandle; Msg: Cardinal;
  WParam, LParam: Integer): Cardinal; Stdcall;
Begin
  { Здесь можно обрабатывать сообщения }
  Result := CallWindowProc(Pointer(OldProc),
    HWnd, Msg, WParam, LParam);
End;

Function EnumProc(HWnd: THandle; LParam: Integer): LongBool; Stdcall;
Var
  S: Array[1..MAX_PATH] Of Char;
  Btn: THandle;
Begin
  Result := True;
  If (GetWindowLong(HWnd, GWL_HWNDPARENT) = Integer(MainWnd)) Then
    If GetClassName(HWnd, @S, MAX_PATH) <> 0 Then
      If PChar(@S) = '#32770' Then
        If Not SetWProc Then
        Begin
          OldProc := SetWindowLong(HWnd, GWL_WNDPROC, LongInt(@MsgWinProc));
          Btn := FindWindowEx(HWnd, 0, 'Button', NIL);
          { Время срабатывания }
          Interval := 20; 
          SetTimer(Btn, 125, 1000, @BtnTimerProc);      
          BtnTimerProc(Btn, 0, 0, 0);
          SetWProc := True;
          KillTimer(HWnd, 124);
          Result := False;         
        End;
End;

Procedure TimerProc(HWnd: THandle; Msg, IDEvent, Time: Cardinal); Stdcall;
Begin
  EnumWindows(@EnumProc, 0);
End;

Procedure SetFont(AWindow: THandle);
Begin
  SendMessage(AWindow, WM_SETFONT, GetStockObject(DEFAULT_GUI_FONT), 1);
End;

Function WinProc(HWnd: THandle; Msg: Cardinal;
  WParam, LParam: Integer): Cardinal; Stdcall;
Begin
  Result := 0;
  Case Msg Of

    WM_CREATE:
      Begin
        Btn := CreateWindowEx(0, 'Button', 'Кнопка', WS_CHILD Or WS_VISIBLE
           Or BS_PUSHBUTTON, 8, 8, 278, 25, HWnd, ButtonID,
             HInstance, NIL);
        SetFont(Btn);
      End;

    WM_COMMAND:
      Begin
        If (LoWord (WParam) = ButtonID)
        And (HiWord (WParam) = BN_CLICKED) Then
        Begin
          SetTimer(0, 124, 55, @TimerProc);
          MessageBox(HWnd, 'Dummy! :)', 'Information', MB_ICONEXCLAMATION);
          SetWProc := False;
        End;
      End;

    WM_DESTROY:
      Begin
        DestroyWindow(Btn);
        PostQuitMessage(0);
      End
        
    Else
      Result := DefWindowProc(HWnd, Msg, WParam, LParam); 
  End;
End;

Procedure WinMain;
Var
  Msg: TMsg;
  WndClassEx: TWndClassEx;
Begin
  WndClassEx.cbSize := SizeOf(TWndClassEx);
  WndClassEx.lpszClassName := 'SampleWindowClass';
  WndClassEx.style := CS_VREDRAW Or CS_HREDRAW;
  WndClassEx.hInstance := HInstance;
  WndClassEx.lpfnWndProc := @WinProc;
  WndClassEx.cbClsExtra := 0;
  WndClassEx.cbWndExtra := 0;
  WndClassEx.hIcon :=  LoadIcon(HInstance, MakeIntResource('MAINICON'));
  WndClassEx.hIconSm := LoadIcon(HInstance, MakeIntResource('MAINICON'));
  WndClassEx.hCursor := LoadCursor(0, IDC_ARROW);
  WndClassEx.hbrBackground := COLOR_BTNFACE + 1;
  WndClassEx.lpszMenuName := NIL;

  If RegisterClassEx(WndClassEx) = 0 Then
    MessageBox(0, 'Невозможно зарегистрировать класс окна',
      'Ошибка', MB_OK Or MB_ICONHAND)
  Else
  Begin
    MainWnd :=
      CreateWindowEx(0, WndClassEx.lpszClassName,
        'Hello!', WS_OVERLAPPEDWINDOW And Not WS_MAXIMIZEBOX
         And Not WS_SIZEBOX, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
         298, 130, 0, 0, HInstance, NIL);

    If MainWnd = 0 Then
      MessageBox (0, 'Окно не создалось!',
        'Ошибка', MB_OK Or MB_ICONHAND)
    Else
    Begin
      ShowWindow (MainWnd, SW_SHOWNORMAL);
      UpdateWindow(MainWnd);

      While GetMessage(Msg, 0, 0, 0) Do
      Begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      End;
      Halt(Msg.WParam);
    End;
  End;
End;

Begin
  Btn := 0;
  InitCommonControls;
  WinMain;
End.


Это сообщение отредактировал(а) Rrader - 14.3.2008, 14:33

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  WinAPI.rar 16,02 Kb


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.