Avatar billede kipolaks Nybegynder
29. maj 2002 - 19:03 Der er 9 kommentarer og
1 løsning

et lille problem...

HEJ!
jeg har en timer hvor i dens OnTimer event vil køre en procedure mit problem er bare at den procedure kan jeg ikke lave nogen parametre til (den laver fjl).
EKS:

Timer1.OnTimer := LavGuldGnu;

Procedure LavGuldGnu;
begin
//et eller andet
end;

det skal så være noget lignene:

Timer1.OnTimer := LavGuldGnu('mokka');

Procedure LavGuldGnu(tekst : string);
begin
form1.caption := tekst;
end;

Get the point?
Avatar billede ziron Nybegynder
29. maj 2002 - 19:36 #1
hvis du dobbelt klikker på din timer kommer du ud i en procedure som hedder DinForm.Timer1.OnTimer, og der i sætte du så LavGuldGnu('mokka'); noget ligende dette:

procedure TForm1.Timer1.OnTimer;
begin
LavGuldGnu('mokka');
end;

/ZIRON
Avatar billede kipolaks Nybegynder
29. maj 2002 - 19:48 #2
det er en timer der bliver sat ind i runtime
Avatar billede ziron Nybegynder
29. maj 2002 - 20:15 #3
oki så bare iorden, så 2 sek... nok

/ZIRON
Avatar billede kipolaks Nybegynder
29. maj 2002 - 20:56 #4
problemet er at det man kalder ved OnTimer eventen er en TNotifyEvent og det er en procedure uden parametre, er der en måde at 'Overgå' dette?
Avatar billede martinlind Nybegynder
29. maj 2002 - 21:35 #5
En TNotifyEvent er en procedure med parameteren Sender som er af typen TObject, og en event er af typen "procedure of object" hvilket betyder det skal være det man også kalder en metode ( en procedure i en klase )

eks :

type
  myclass = tclass
    myt : TTimer;   
    procedure MyOnTimer( sender : tobject );
  end;


begin
  myt := TTimer.create(nil);
  myt.OnTimer := MyOnTimer;   
end;

----------------------
Sådan gøres det

/Martin
Avatar billede kipolaks Nybegynder
29. maj 2002 - 22:08 #6
det hjælper mig jo ikke så meget hvis jeg gerne vil skrive:
myt.OnTimer := MyOnTimer('mokka','gnu');
Avatar billede kipolaks Nybegynder
29. maj 2002 - 23:13 #7
Ok, Det jeg så er ude efter er at ændre timerens OnTimer property.
HVORDAN!!!!????
kan man ik gøre noget lignende:

TMinTimer = class(TTimer)
property OnTimer: //Og så er det sq allerede her jeg står af!
                  //men det skulle jo meget gerne ende op med at
                  //jeg kan kalde MinOnTimer som vist herunder.
end;

var
minTimer : TMinTimer;

minTimer := TminTimer.create(nil);
minTimer.OnTimer := MinOnTimer('Hans Larsen');

procedure MinOnTimer(tekst : string);
begin
//whatever
end;

PS. hvis de 15 point ikke er nok så finder vi bare ud af det!!!
Avatar billede zimp Nybegynder
30. maj 2002 - 11:05 #8
Du skal lave en klasse der arver fra TTimer for at kunne gøre det. Men det er heldigvis ikke så svært, her er et eksempel:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Extctrls;

type
{ ---------- TMyTimer --------------> }
  TMyNotifyEvent = procedure(Sender: TObject; NotifyString: string) of object;

  TMyTimer = class(TTimer)
  private
    FOnTimerEx : TMyNotifyEvent;
    FNotifyString: string;
    procedure SetTimerEx(OnTimerEx: TMyNotifyEvent);
    procedure OldTimerEvent(Sender: TObject);
  published
    property NotifyString: string read FNotifyString write FNotifyString;
    property OnTimerEx: TMyNotifyEvent read FOnTimerEx write SetTimerEx;
  end;

{ --------- normal TForm ------------> }

  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    T : TMyTimer;
    procedure OnTimerEx(Sender: TObject; NotifyString: string);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ ---------- TMyTimer --------------> }

procedure TMyTimer.OldTimerEvent(Sender: TObject);
begin
  if Assigned(FOnTimerEx) then FOnTimerEx(Self, FNotifyString);
end;

procedure TMyTimer.SetTimerEx(OnTimerEx: TMyNotifyEvent);
begin
  FOnTimerEx := OnTimerEx;
  OnTimer := OldTimerEvent;
end;

{ --------- normal TForm ------------> }

procedure TForm1.OnTimerEx(Sender: TObject; NotifyString: string);
begin
  Label1.Caption := NotifyString;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  T := TMyTimer.Create(Self);
  T.OnTimerEx := OnTimerEx;
  T.NotifyString := 'TMyTimer muhahaha';
  T.Interval := 1000;
  T.Enabled := TRUE;
end;

end.
Avatar billede kipolaks Nybegynder
30. maj 2002 - 14:24 #9
takker zimp, smid lige et lille svar så får du dine velfortjente point
Avatar billede zimp Nybegynder
30. maj 2002 - 14:47 #10
Welcome
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester