/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Messagebox, som lukker selv efter 5 sek.
Fra : Lars Holm Thomsen


Dato : 22-09-04 09:38

Hvordan gør jeg det?

Altså:
En besked om et eller andet vises på skærmen! Efter et vist stykke tid
lukkes besked-boxen automatisk!

Lars

 
 
Thor (22-09-2004)
Kommentar
Fra : Thor


Dato : 22-09-04 14:03

Hermed en kort, ikke specielt elegant løsning, men det bør virke:

Du laver selv en form, der viser meddelelsen.

I form.activate:
starttid := gettickcount;
timer1.enabled := true;

timer1ontimer:

if gettickcount-starttid > 10000 then // 10 sekunder;
begin
close;
end;

form1.deactivate:

timer1.enabled := false



"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:u8e2l0169inc3fcgaj35je63q2uf8cdqjq@4ax.com...
> Hvordan gør jeg det?
>
> Altså:
> En besked om et eller andet vises på skærmen! Efter et vist stykke tid
> lukkes besked-boxen automatisk!
>
> Lars



Harald (22-09-2004)
Kommentar
Fra : Harald


Dato : 22-09-04 14:13

"Thor" <thor@thor.thor> skrev i en meddelelse
news:cirsue$1jv9$1@news.cybercity.dk...
> Hermed en kort, ikke specielt elegant løsning, men det bør virke:
>
> Du laver selv en form, der viser meddelelsen.
>
> I form.activate:
> starttid := gettickcount;
> timer1.enabled := true;
>
> timer1ontimer:
>
> if gettickcount-starttid > 10000 then // 10 sekunder;
> begin
> close;
> end;
>
> form1.deactivate:
>
> timer1.enabled := false

Hvorfor ikke bare sætte timer.interval=10000 i stedet for at bruge
gettickcount?

/HK



Thor (22-09-2004)
Kommentar
Fra : Thor


Dato : 22-09-04 14:20

Hej Harald
Det kan man sikkert også, men nogen gange synes jeg,
at timereventen køres lige efter enabled sættes lig true, uanset
intervallets længde.

Hilsen Thomas



Lars Holm Thomsen (22-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 22-09-04 14:19

On Wed, 22 Sep 2004 15:03:04 +0200, "Thor" <thor@thor.thor> wrote:

>Hermed en kort, ikke specielt elegant løsning, men det bør virke:
>
>Du laver selv en form, der viser meddelelsen.
>
>I form.activate:
>starttid := gettickcount;
>timer1.enabled := true;
>
>timer1ontimer:
>
>if gettickcount-starttid > 10000 then // 10 sekunder;
>begin
> close;
>end;
>
>form1.deactivate:
>
>timer1.enabled := false

Ja, okay, jeg burde være mere præcis:

Jeg kan sagtens få det til med en form, men.

Det jeg søger er noget i stil med :

ShowMessage('Programmet har til orientering gjort det og det!');

Men dette besked bliver jo stående til brugeren trykker ok! Er der ikke
noget lignende, som bare lukker selv efter en vis tid??

Lars

Harald (22-09-2004)
Kommentar
Fra : Harald


Dato : 22-09-04 16:15

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:u8e2l0169inc3fcgaj35je63q2uf8cdqjq@4ax.com...
> Hvordan gør jeg det?
>
> Altså:
> En besked om et eller andet vises på skærmen! Efter et vist stykke tid
> lukkes besked-boxen automatisk!

Her er et forslag, jeg syntes det virker lidt fusket men det virker (ser det
ud til), brugeren kan så vælge at trykke OK eller vente 10 sek.

En form med en Button på og en Timer hvor Enabled=false og Interval=10000

------------

function TForm1.MinBeskedBox(Tekst : PChar) : integer;
begin
Timer1.Enabled:=true;
result:=Application.MessageBox(PChar(Tekst),'Info', MB_ICONASTERISK);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MinBeskedBox('Noget info');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
MbHwnd: longword;
begin
Timer1.Enabled:=false;
MbHwnd:=FindWindow(MAKEINTRESOURCE(WC_DIALOG), 'Info');
if MbHwnd<>0 then
DestroyWindow(MbHwnd);
end;

---------------

Mvh
HK



Lars Holm Thomsen (22-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 22-09-04 17:28

On Wed, 22 Sep 2004 17:15:27 +0200, "Harald"
<news10@-REMOVE-THIS-kroning.dk> wrote:


>Her er et forslag, jeg syntes det virker lidt fusket men det virker (ser det
>ud til), brugeren kan så vælge at trykke OK eller vente 10 sek.
>
>En form med en Button på og en Timer hvor Enabled=false og Interval=10000
>
>------------
>
>function TForm1.MinBeskedBox(Tekst : PChar) : integer;
>begin
> Timer1.Enabled:=true;
> result:=Application.MessageBox(PChar(Tekst),'Info', MB_ICONASTERISK);
>end;
>
>procedure TForm1.Button1Click(Sender: TObject);
>begin
> MinBeskedBox('Noget info');
>end;
>
>procedure TForm1.Timer1Timer(Sender: TObject);
>var
> MbHwnd: longword;
>begin
> Timer1.Enabled:=false;
> MbHwnd:=FindWindow(MAKEINTRESOURCE(WC_DIALOG), 'Info');
> if MbHwnd<>0 then
> DestroyWindow(MbHwnd);
>end;
>
Tak skal du have - det virker fint!

Jeg tænker på on det ikke er muligt at indlemme timeren i funktionen?
Det er jo ikke det store problem at create en timer runtime, men kan jeg
også create en TimerTimer metode?

Lars

Harald (22-09-2004)
Kommentar
Fra : Harald


Dato : 22-09-04 17:44

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:9f83l0lf29ihuskscvt8s4c252iiccqpne@4ax.com...
> On Wed, 22 Sep 2004 17:15:27 +0200, "Harald"
> <news10@-REMOVE-THIS-kroning.dk> wrote:
>
>
>>Her er et forslag, jeg syntes det virker lidt fusket men det virker (ser
>>det
>>ud til), brugeren kan så vælge at trykke OK eller vente 10 sek.
>>
>>En form med en Button på og en Timer hvor Enabled=false og Interval=10000
>>
>>------------
>>
>>function TForm1.MinBeskedBox(Tekst : PChar) : integer;
>>begin
>> Timer1.Enabled:=true;
>> result:=Application.MessageBox(PChar(Tekst),'Info', MB_ICONASTERISK);
>>end;
>>
>>procedure TForm1.Button1Click(Sender: TObject);
>>begin
>> MinBeskedBox('Noget info');
>>end;
>>
>>procedure TForm1.Timer1Timer(Sender: TObject);
>>var
>> MbHwnd: longword;
>>begin
>> Timer1.Enabled:=false;
>> MbHwnd:=FindWindow(MAKEINTRESOURCE(WC_DIALOG), 'Info');
>> if MbHwnd<>0 then
>> DestroyWindow(MbHwnd);
>>end;
>>
> Tak skal du have - det virker fint!
>
> Jeg tænker på on det ikke er muligt at indlemme timeren i funktionen?
> Det er jo ikke det store problem at create en timer runtime, men kan jeg
> også create en TimerTimer metode?

Sådan kan du create en timer og sætte OnTimer:

Timer1:=TTimer.Create(self);
Timer1.OnTimer:=Timer1Timer;

I Timer1Timer kan du så rette linien:
Timer1.Enabled:=false;
til
(Sender as TTimer).Enabled:=false;

/HK




Lars Holm Thomsen (22-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 22-09-04 23:18

On Wed, 22 Sep 2004 18:43:56 +0200, "Harald"
<news10@-REMOVE-THIS-kroning.dk> wrote:


>>
>> Jeg tænker på on det ikke er muligt at indlemme timeren i funktionen?
>> Det er jo ikke det store problem at create en timer runtime, men kan jeg
>> også create en TimerTimer metode?
>
>Sådan kan du create en timer og sætte OnTimer:
>
> Timer1:=TTimer.Create(self);
> Timer1.OnTimer:=Timer1Timer;
>
>I Timer1Timer kan du så rette linien:
>Timer1.Enabled:=false;
>til
>(Sender as TTimer).Enabled:=false;

Jeg ønsker at kunne inkludere hele koden i en procedure, som kan smides
i en unit og køres - uden at skulle deklarere metoder under TForm!

Det med at create selve timeren går fint og kan kodemæssigt holdes
indenfor proceduren, men mht timer.ontimer kan jeg ikke få det til, hvis
ikke metoden bliver deklareret udenfor proceduren i Interface-afsnittet!

Håber at du forstår!

Kan det ikke lade sig gøre?

Lars

Harald (23-09-2004)
Kommentar
Fra : Harald


Dato : 23-09-04 15:46

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:o6u3l0la9n3h6prhgkotq3ak8k2jfp8qeo@4ax.com...
> On Wed, 22 Sep 2004 18:43:56 +0200, "Harald"
> <news10@-REMOVE-THIS-kroning.dk> wrote:
>
>
>>>
>>> Jeg tænker på on det ikke er muligt at indlemme timeren i funktionen?
>>> Det er jo ikke det store problem at create en timer runtime, men kan jeg
>>> også create en TimerTimer metode?
>>
>>Sådan kan du create en timer og sætte OnTimer:
>>
>> Timer1:=TTimer.Create(self);
>> Timer1.OnTimer:=Timer1Timer;
>>
>>I Timer1Timer kan du så rette linien:
>>Timer1.Enabled:=false;
>>til
>>(Sender as TTimer).Enabled:=false;
>
> Jeg ønsker at kunne inkludere hele koden i en procedure, som kan smides
> i en unit og køres - uden at skulle deklarere metoder under TForm!
>
> Det med at create selve timeren går fint og kan kodemæssigt holdes
> indenfor proceduren, men mht timer.ontimer kan jeg ikke få det til, hvis
> ikke metoden bliver deklareret udenfor proceduren i Interface-afsnittet!

Mht. OnTimer så er det en TNotifyEvent og her siger hjælpen:

Delphi syntax:
type TNotifyEvent = procedure (Sender: TObject) of object;

hvilket betyder at proceduren skal deklareres i en klasse, så hvis du vil
have det hele samlet i en unit er du nød til at lave en ny class som du så
kan smide det hele ind i, vil jeg mene.

/HK



Lars Holm Thomsen (23-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 23-09-04 15:53

On Thu, 23 Sep 2004 16:45:35 +0200, "Harald"
<news10@-REMOVE-THIS-kroning.dk> wrote:


>
>Mht. OnTimer så er det en TNotifyEvent og her siger hjælpen:
>
>Delphi syntax:
>type TNotifyEvent = procedure (Sender: TObject) of object;
>
>hvilket betyder at proceduren skal deklareres i en klasse, så hvis du vil
>have det hele samlet i en unit er du nød til at lave en ny class som du så
>kan smide det hele ind i, vil jeg mene.
>
>/HK
>

Tak for svaret

Det er vist også nogenlunde det samme, jeg er kommet frem til!


Lars

Harald (23-09-2004)
Kommentar
Fra : Harald


Dato : 23-09-04 16:14

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:dno5l05j96rnc0up5hmi0hlvngt45iilgg@4ax.com...
> On Thu, 23 Sep 2004 16:45:35 +0200, "Harald"
> <news10@-REMOVE-THIS-kroning.dk> wrote:
>
<cut>
>
> Tak for svaret
>
> Det er vist også nogenlunde det samme, jeg er kommet frem til!

F.eks. sådan:

unit Unit2;

interface

uses
ExtCtrls, Forms, Windows;

type
TMinBesked = class
function MinBeskedBox(Tekst : PChar) : integer;
private
procedure TimerTimer(Sender: TObject);
end;

var
MinBesked : TMinBesked;

implementation

function TMinBesked.MinBeskedBox(Tekst : PChar) : integer;
begin
With TTimer.Create(nil) do
begin
Interval:=10000;
Enabled:=true;
OnTimer:=TimerTimer;
end;

result:=Application.MessageBox(PChar(Tekst),'Info', MB_ICONASTERISK);
end;

procedure TMinBesked.TimerTimer(Sender: TObject);
var
MbHwnd: longword;
begin
(Sender as TTimer).Free;

MbHwnd:=FindWindow(MAKEINTRESOURCE(WC_DIALOG), 'Info');
if MbHwnd<>0 then
DestroyWindow(MbHwnd);
end;

end.

/HK



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste