Autor Beitrag
pentaxfan2
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 16:55 
Hi,
ich bin absoluter Deplhi Anfänger und würde gerne eine Programm schreiben, mit dem ich die Wartezeiten von Blutspendern kontrollieren kann.
Dh: Jemand kommt zu mir, Blut wird abgenommen, ich trage ihn mit seinem Namen in das Programm ein, der Name erscheint in einer Liste, nach 10 Minuten verschwindet der Name aus der Liste.
Mein Problem ist, dass der Timer nicht funktioniert und ich nicht weiß, wie ich mit einem Editfeld und einem Button Namen in eine Liste eintragen kann. Bitte helft mit!

danke im Vorraus

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 05.10.2010 um 17:14
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.10.10 17:03 
Hallo und :welcome:

user profile iconpentaxfan2 hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem ist, dass der Timer nicht funktioniert
Inwiefern?
Was hast du denn schon?
pentaxfan2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 17:36 
des hab ich ausm forum entnommen:



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.FormCreate(Sender: TObject);
begin
 timer1.Enabled:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 timer1.Interval:=10000;
 timer1.Enabled :=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 timer1.Enabled:=false;
 //Hier kommt jetzt die Anweisung, den Namen der Person wieder zu löschen
end;






ich hab bisher nur ein bisschen herumgespielt und das Programm noch nicht richtig aufgebaut.

Moderiert von user profile iconKha: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von pentaxfan2 am Di 05.10.10 19:02, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.10.10 17:43 
Dann überlege dir doch zuerst einmal wie du das auf dem Papier lösen würdest. Ganz genau, Schritt für Schritt.

Außerdem:
Ist dir denn klar wie ein Timer prinzipiell funktioniert?
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Di 05.10.10 17:59 
Interval von 10000 ms = 10 Sekunden <> 10 Minuten
pentaxfan2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 18:03 
mein problem ist, dass nach ablauf des timers die aktion die dann folgen soll (also die Löschung des namens)
nicht ausgeführt wird.

mein zweites problem ist, dass ich nicht weiß, wie ich mehrere namen in eine liste schreiben kann, ohne mehrere buttons zu haben... (aber das ist vorerst nicht soo wichtig)
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 05.10.10 18:09 
Hi, na da hast Du doch schon ein Stichwort selbst genannt, Stringlist + anzeigen mit Memo.
Was den Timer betrifft solltest Du überlegen ob der Timer für den Spender da sein soll, oder zum Vergleich der Zeiten, wann du den Spender eingetragen hast in der Liste?
Und für das Eintragen in der Stringlist reicht ein EditFeld und ein Button :wink:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
pentaxfan2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 18:56 
der Timer soll dazu da sein, zu zeigen, wer noch warten muss. nach der spende müssen 10min Pause eingelegt werden.
also der spender muss davon nichts sehen, ist nur für das spendensammelteam, damit die bescheidwissen, wenn ein spender weggehen kann.

ich erklär mal wie des programm aussehen soll:

oben: eingabefeld wo man den namen einträgt und ein button, damit der name unten in der liste eingetragen wird.
unten: liste, auf der die Spender geordnet stehen. wenn ein spender seine 10min überstanden hat, wird dieser automatisch von der liste gelöscht.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 05.10.10 19:29 
Dann würd ich einfach alle 5 sek. ca. in ner internen liste verwalten ob der oberste in der Liste gehen kann. diese interne liste würde ich dann grafisch an eine TListbox koppeln die dann die namen ausgibt.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
pentaxfan2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 19:44 
also fast alle probleme gelöst:
mit ner memo werden die namen in die liste eingetragen.
mein einziges problem ist, dass nach ablauf der zeit des timers die aktion, den namen zu löschen
nicht ausgeführt wird ( ich habe es auch mit anderen bsps ausprobiert, also es liegt nicht daran, dass
die aktion nen fehler hat) .

nochmal verständlich :D :
Wenn der timer abgelaufen ist passiert nichts mehr!
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 05.10.10 19:45 
user profile iconpentaxfan2 hat folgendes geschrieben Zum zitierten Posting springen:
wenn ein spender seine 10min überstanden hat, wird dieser automatisch von der liste gelöscht.
wobei ich dies etwas gewagt halte. Lieber ne Anzeige(farblich) das der Delinquent gehen kann und bestätigen. Vorteil, sollte man mal nicht am PC gewesen sein so sieht man, das da jemand noch rumsitz und nicht Feierabendmacht nur weil die Liste leer ist :mrgreen:
Wie nun Dein Prog sein soll und was es alles kann, sei Dir überlassen :wink:
Einfach loslegen(mit Überlegung) und wenn was nicht klappt, so wird ihnen geholfen 8)

Gruss Alf


Moderiert von user profile iconGausi: Beiträge zusammengefasst.

user profile iconpentaxfan2 hat folgendes geschrieben Zum zitierten Posting springen:
Wenn der timer abgelaufen ist passiert nichts mehr!

Dann solltest du den Code Posten nur so können wir Deinen Fehler sehen :wink:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 05.10.10 19:52 
vielleicht hilft dir das hier weiter:

Christians Crashkurs
Delphi-Wikibook

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
pentaxfan2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 19:53 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
implementation

{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
begin
 timer1.Enabled:=false;
 for i := Memo1.Lines.Count - 1 downto 0 do begin
    if (Memo1.Lines[i] = '<not found>'then begin
         Memo1.Lines.Delete(i);
    end;
  end;

end;

function liesperson:Tperson;
begin
  result.name:= form1.edit1.Text;
end;

procedure schreibperson(person:Tperson);
var Timer1: TTimer;
begin
 form1.Memo1.lines.add(person.name);
end;

procedure TForm1.Button1Click(Sender: TObject);
 var person: TPerson;
begin
  person := liesperson;
  schreibperson(Person);
  Timer1.Enabled :=true;
  timer1.Interval:=10000;
  Timer1Timer(Sender);
end;









ich hab noch nen bisschen dran rumgespielt, also einige sachen sind an orten, an die sie nicht gehören :D
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 05.10.10 20:17 
Warum so umständlich :gruebel:
TPerson ist was?
Für was ist dies?
ausblenden Delphi-Quelltext
1:
2:
procedure schreibperson(person:Tperson);
var Timer1: TTimer;

user profile iconpentaxfan2 hat folgendes geschrieben Zum zitierten Posting springen:
mein einziges problem ist, dass nach ablauf der zeit des timers die aktion, den namen zu löschen
nicht ausgeführt wird ( ich habe es auch mit anderen bsps ausprobiert, also es liegt nicht daran, dass
die aktion nen fehler hat) .

Weil Du den Timer stopst befor die Schleife durchlaufen ist.
Richtig müsste es so sein
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
begin
   for i := Memo1.Lines.Count - 1 downto 0 do 
   begin
      if (Memo1.Lines[i] = '<not found>'then
      begin
          Memo1.Lines.Delete(i);
          timer1.Enabled:=false;  
      end;
   end;
end;


Würde Dir aber trotzdem empfehlen die einzelnen Antworten mal durchzulesen!

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
pentaxfan2 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 05.10.10 20:23 
wie schon gesagt, ich bin absoluter anfänger und verstehe vieles nicht :D
@Alf: ich habe den Code geändert, aber es klappt immernoch nicht....
Georg08
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 155
Erhaltene Danke: 6

Win XP
Delphi 7.0 Personal
BeitragVerfasst: Di 05.10.10 20:23 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:

[...]
TPerson ist was?
[...]


Frage ich mich auch gerade :D

Und wenn du das so macht müsstest du doch entweder für jeden User einen Teimer erstellen (nich gut :D )
oder für jeden User ine Zeit speichern, und diese dann mit einem Timer abfragen, aber in kleineren intervallen ;-)
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 05.10.10 20:47 
Wichtiger Tipp hat Dir user profile iconelundril gegeben und von mir gibts auch noch einen!
Wenn etwas im Prog nicht funktioniert, ein Haltepunkt setzen und mit F7 oder F8 durchsteppen was das Prog macht bzw nicht macht! So erkennt man ganz schnell die einfachsten Fehler :wink:
Z.B. Ob Variablen richtig gesetzt sind, das Prog auch dahin springt wo es soll usw.
Hilft manchmal mehr als tausend Antworten die man evtl nicht versteht!
Denn ich frage mich auch, was dies soll?
ausblenden Delphi-Quelltext
1:
Timer1Timer(Sender);					
sobald Du den Timer1.enabled:=true setzt wird er gestartet. Ein zusätzlicher Aufruf ist nicht notwendig.
Ansonsten frag ich mich jetzt auch, ob ich Dir was falsches schreibe, wenn es trotzdem nicht funktioniert :gruebel:

Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: Di 05.10.10 21:04 
user profile iconALF hat geschrieben
Zitat:
Weil Du den Timer stopst befor die Schleife durchlaufen ist.


Da bin ich anderer Meinung. Wenn Du timer.enabled:=false setzt wird beim nächsten ablauf des Intervalls keine TimerEvent mehr ausgelöst. Die bereits gestartete Procedure wird aber fertig druchlaufen.

Meines Erachtens ist der Ablauf wie user profile iconGeorg08 vorzuziehen.
- Bei der Person den Eintragszeitpunkt speichern
- bei einem Timerevent die Liste durchgehen ob ein Eintrag länder als 10 min in der Liste steht.

Gruss
Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mi 06.10.10 09:36 
user profile iconbole hat folgendes geschrieben Zum zitierten Posting springen:
Die bereits gestartete Procedure wird aber fertig druchlaufen.
Jo, hast Du natürlich recht.

Da ich ihm also schon was falsches gesagt habe, werd ich ihm mal ein kleines Beispiel zur Anregung geben.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
.....
.....
Private
    kunde: TStringlist;
    goTime: TTime;
.....
.....
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    kunde:= TStringList.Create;
    goTime:= StrToTime('00:01:00'); //zum test auf 1min gesetzt
    Memo1.Clear;
    Edit1.Text:= '';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    if Edit1.Text= '' then exit;
    kunde.Add(Edit1.Text+' '+TimeToStr(Now)+'='+ TimeToStr(Now+goTime));
    Memo1.Lines.Add(Edit1.Text+' '+TimeToStr(Now)+'='+ TimeToStr(Now+goTime));
    Edit1.Text:= '';
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
    istTime: TTime;
    kundenTime: TTime;
begin
    istTime:= Time;
    for i:= 0 to kunde.Count - 1 do
    begin
        kundenTime:= StrtoTime(kunde.ValueFromIndex[i]);
        if istTime >= kundenTime then
        begin
            kunde.Delete(i);
            Memo1.Clear;
            Memo1.Lines.AddStrings(kunde);
            break;
        end;
    end;
end;

Was Du user profile iconpentaxfan2 daraus machst, also einfach die Liste automatisch löschen, ohne Kontrolle ob der Delinquent auch wirklich geht, bescheid bekommt, find ich persöhnlich nicht sehr schön. Aber über Geschmack lässt sich wahrlich streiten :mrgreen:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!


Zuletzt bearbeitet von ALF am Mi 06.10.10 11:42, insgesamt 1-mal bearbeitet
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: Mi 06.10.10 11:18 
Was mit einem Eintrag der 10 Minuten alt ist zu geschehen hat, habe ich nicht definiert... :mrgreen:

Ich bin da Deiner Meinung das man den Eintrag nicht einfach löschen soll. Dieser sollte markiert werden und bestätigt werden.

Gruss

Bole

_________________
ein programm macht nicht das was du willst sondern was du schreibst!