15. april 2006 - 21:20Der er
11 kommentarer og 2 løsninger
Kørsel af procedure?
Jeg er ved at lave en timer-funktion, men forstår endnu ikke Delphi godt nok vedr. procedurer og hændelser.
Nedenstående scripts er procedurer, som umiddelbart ser ud til at køre igen og igen hvert 50 milllisekund(evnt:Ontimer sat til 50):
procedure TForm1.Timer1Timer(Sender: TObject); var i, Data1, Data2, StartTime, HvorLangTidErDerGaaet: longint; begin timer1.enabled:=false; ReadAllAnalog(Data1,Data2); ProgressBar1.Position:=Data1; ProgressBar2.Position:=Data2; if Data1>100 then StartTime := GetTickCount; Label14.caption:=inttostr(Data1); Label16.caption:=inttostr(Data2); i:=ReadAllDigital; timer1.enabled:=true;
end;
OG PROCEDURE 2:
procedure TForm1.Timer2Timer(Sender: TObject); var i, Data1, Data2, StartTime, HvorLangTidErDerGaaet: longint; begin timer1.enabled:=false; ReadAllAnalog(Data1,Data2); ProgressBar2.Position:=Data2; Label16.caption:=inttostr(Data2); i:=ReadAllDigital; if Data2>100 then HvorLangTidErDerGaaet := (StartTime - GetTickCount); Label1.caption := inttostr(HvorLangTidErDerGaaet); timer1.enabled:=true;
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Ok - ja har set det med rtyk-fejlen.. får næsten lyst til at oprette sp. igen hehe... Jeg er så ny i sproget, at jeg umiddelbart naivt troede at 'true' forneden var en naturlig ting. Ber' kommenterende og besvarende om en lille kunstpause, da jeg netop sidder og bruger feedbacken og retter til (går lidt langsomt...) Hvordan det ikke virker? -> Jeg sidder og roder med analoge 4,5 V's elektronik-input, der fungerer som trigger (Data1, Data2) En hændelse jeg meget gerne vil bruge, er derfor det analoge input - føromtalte trigger.
Hov - Jeg sidder med Delphi 4 og finder først ud af nogle ting - via help - omkring 'type' nu. Skylder derfor at forklare at typen: TTimer, som default skal være false for at virke :-S - sorry... famler lidt meget, men jeg gør alt i min magt, da dette hobby-projekt prioriteres højt. Script-stump omkring timer1 og -2 virker derfor kun som i den ovenstående form.
Jamen jeg går ud fra at du har 2 stk. TTimer som hver er sat til 50 i interval. Hvis du sætter disse 2 Timeres Enable=true ved program start så vil de kalde procedure 1 og 2 hver ca. 50 milisekunder.
Jo - hvert 50. millisekund for dem begge. Nu hvor jeg prøvet lidt af hvert er jeg kommet frem til at problemet ligger et andet sted. Først og fremmest har jeg lagt 'label1' der forklarer 'HvorLangTidErDerGaaet', over i en anden timer, som kun looper hvert 4 sek (4000ms under Object/Interval) - se Timer5:
procedure TForm1.Timer1Timer(Sender: TObject); var i, Data1, Data2, StartTime: longint; begin timer1.enabled:=false; ReadAllAnalog(Data1,Data2); ProgressBar1.Position:= Data1; ReadAllAnalog(Data1,Data2); begin if Data2 = 0 then StartTime:= 0 else StartTime := GetTickCount; end; Label14.caption:=inttostr(Data1); i:=ReadAllDigital; timer1.enabled:=true;
end;
PROC. 2:
procedure TForm1.Timer2Timer(Sender: TObject); var i, Data1, Data2, StartTime, HvorLangTidErDerGaaet: longint; begin timer2.enabled:=false;
ReadAllAnalog(Data1,Data2); ProgressBar2.Position:= Data2; ReadAllAnalog(Data1,Data2); begin if Data2 = 0 then HvorLangTidErDerGaaet := 0 else HvorLangTidErDerGaaet := (StartTime - GetTickCount); end; Label16.caption:=inttostr(Data2); i:=ReadAllDigital; timer2.enabled:=true;
end;
PROC. 3 - TIMER5:
procedure TForm1.Timer5Timer(Sender: TObject); var i, Data1, Data2, StartTime, HvorLangTidErDerGaaet: longint; begin timer5.enabled:=false; Starttid.caption := inttostr(StartTime); Forskel.caption := inttostr(HvorLangTidErDerGaaet); timer5.enabled:=true;
end;
Ovenstående if-statements bliver kørt uanset om de er opfyldt eller ej. Det ser ud som om de skrevet forkert, men jeg kan ikke finde en mere rigtig syntax i Help-funktionen :-S Derfor virker min trigger ikke rigtigt på trods af, at min 'Progressbar' får de rigtige input - det vil sige 0 fra start - og ellers viser det den skal... Øv x 10^23
DET VIRKER!!! Yipee x 10^91... Kroning - selv om du kun har været delvist bidragende til løsningen får du æren for den gode sportsånd. Smid et svar.
Jeg fandt selv en løsning og i fald kommenterende og andre Delhpi-interesserede har lyst til at se løsningen, så følger den herefter. Det skal nævnes, at scriptene er bygget ovenpå en source-kode der højst sandsynligt kun er et par år gammel (Delphi 7-8 stykker eller senere...), og at jeg selv har siddet med Delphi 4. - Måske kan det have noget at sige for de rigtig indviede.
Løsningen En procedure var nok:
procedure TForm1.Timer1Timer(Sender: TObject); var i, Data1, Data2, StartTime, HvorLangTidErDerGaaet: longint; begin timer1.enabled:=false; ReadAllAnalog(Data1,Data2); ProgressBar1.Position:= Data1; ProgressBar2.Position:= Data2; case Data1 of 1..255: Begin StartTime := GetTickCount; Starttid.caption := inttostr(StartTime); end; 0: StartTime:= 0 end; case Data2 of 1..255: Begin HvorLangTidErDerGaaet := (StartTime - GetTickCount)*(-1); Forskel.caption := inttostr(HvorLangTidErDerGaaet); end; 0: HvorLangTidErDerGaaet := 0; end; Label14.caption:=inttostr(Data1); Label16.caption:=inttostr(Data2); timer1.enabled:=true;
Men hvad skal jeg så give resterende? Med mindre pointsystemet er lavet om, og man kan beholde resten af udlovede point, så skal resterende af kommenterende have resten eller?(i så fald, i den grad ufortj.) - skulle de så også have givet et svar for at få point?
Det er et stykke tid siden jeg har givet point - får jeg et tekstfelt til pointangivelse, hvis jeg trykker 'Accepter'? Kan jeg undgå at give dig alle pointene i et hug, ved tryk på 'Accepter?
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.