05. juli 2007 - 20:49Der er
16 kommentarer og 2 løsninger
Hvordan laver jeg events på et dynamisk object?
Hola
Jeg har en TGsm (myGsm) komponent som jeg opretter i en tråd der skal sende sms'er via et modem.
Jeg kan dog ikke nedlægge objektet igen før sms'en er sendt, ellers kommer den ikke afsted så jeg har brug for at sætte en bool ved isSending:= true; myGsm.SendMsg(phonenmb,msg); while isSending do sleep(200);
hvordan får jeg sat isSending := false i myGsm's onSmsSent event? Eller hvordan gør man ellers sådan noget?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
umiddelbart ville jeg gå ind og lave en ny komponent, med baggrund i den du allerede har, hvis du smider et link til komponenten, skal jeg nok prøve at få tid til at lave det her en af dagene.
Sagtens. Du skal lave en procedure med parametre ligesådan som der sker når du dobbeltklikker på eventen i din Object inspector. Faktisk er det hvad du skal gøre, dobbeltklikke. Proceduren fylder du med kode og flytter derhen hvor du har brug for den.
procedure TMyThread.MyProcedureThatHandlesErrors(Sender: TObject; ..); begin end;
kan jeg ikke i en funktion gøre det samme da gsm objektet kun skal oprettes i halvdelen af tilfældene? jeg har en
function SendSms(); begin fGSM := TGSM.create(nil); try //some code finally fGSM.free; end; end;
Lige efter gsm.create ville jeg så sætte objektets OnSmsSent event til en funktion jeg selv har lavet men den brokker sig over at parametrene ikke passer (eller sådan noget, er på arbejde så kan ikke lige huske den præcise formulering). OnSmsSent eventet ser sådan her ud: OnSmsSent(Sender: TObject; aMem: string; idSms: integer; aSms: TnrPduSms);
Så hvordan sætter jeg nu min funktion til at køre på eventet? Skal jeg oprette tomme variabler og sætte ind i parameterlisten? Bliver de så fyldt ud eller hvordan foregår det?
Og til fremtidig reference, kan min egen funktion også tage parametre udover Sender:Tobject (som altid er nil i en tråd?) ?
Bare en lidt voldsom løsning hvis det kan gøres ved at ændre komponentens Onxxx-event. Ellers skal jeg jo til at lave en ny komponent hver gang jeg vil ha' den til at gøre noget forskelligt?
nej, det eneste du reelt ændrer er den onxxx-event, resten af koden arver den fra TGSM, det eneste du ellers skal være opmærksom på, er at få kopieret published delen, fra originalen.
ok, glad for at du fandt en løsning, men hvis du en anden gang står i et problem hvor du skal have ændret en onxxx event, så er det altså en overkommelig opgave.
Problemet med ovenstående er at resten af Some Code ikke skulle fortsætte før onmessagesent var blevet triggered, så derfor ser jeg ingen anden løsning end at bruge sleep?
SendSms bliver kaldt fra en anden funktion der har checket på om det er en mail eller en sms der skulle sendes. Når beskeden så er blevet sendt vender den tilbage til den kaldende funktion som færdiggører opdateringer af et par tabeller samt loggen på min main-form.
Tak for det hrc, det ligner noget jeg kan eksperimentere med på en kold vinterdag :)
Synes godt om
Ny brugerNybegynder
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.