![]() |
Delphi-Version: 10 Berlin
Memo befüllen in Timer = leer
Hallo,
ich habe hier ein ganz komisches Problem. Es existieren zwei Memo Boxen. Memo1 liest eine Datei ein und schaut Zeile für Zeile ob ein String vorhanden ist, wenn ja wird ab dieser Zeile nichts mehr in Memo2 eingetragen. Das funktioniert super in Form.Show aber nicht wenn dies in einem Timer aufgerufen wird. Das Memo ist nur 20-40Zeilen lang (Config Datei) Ich möchte mit Ablauf von Timer2 in der Config ab der Zeile mit String #Hier_nicht_mehr die restlichen Zeilen raus haben.
Delphi-Quellcode:
In dem Timer siehts dann so aus
Memo1.Lines.LoadFromFile('dateiname');
Memo2.Clear; for i := 0 to Memo1.Lines.Count-1 do begin if (Pos('#Hier_nicht_mehr', Memo1.Lines[i]) <> 0) and (r = 0) then r := 1; if r = 0 then Memo2.Lines.Add(Memo1.Lines[i]); end;
Delphi-Quellcode:
In der if Abfrage wird vor und nach der For Schleife noch zwei andere Sachen gesetzt die auch richtig sind. Hab schon die Memo Sachen in eine eigene procedur ausgelager und die dort aufgerufen aber das geht auch nicht. Im Form.Show hingegen alles super. Es mit nur einem Memo zu versuchen brachte auch nichts.
if time = 0 then
begin Timer1.Enable := false; Memo1.Lines.LoadFromFile('dateiname'); Memo2.Clear; for i := 0 to Memo1.Lines.Count-1 do begin if (Pos('#Hier_nicht_mehr', Memo1.Lines[i]) <> 0) and (r = 0) then r := 1; if r = 0 then Memo2.Lines.Add(Memo1.Lines[i]); end; end;
Delphi-Quellcode:
for i := 0 to Memo1.Lines.Count-1 do begin
if (Pos('#Hier_nicht_mehr', Memo1.Lines[i]) > 0) and (r = 0) then r := 1; if r = 1 then Memo1.Lines.Delete(i); end; Die Config sieht so aus:
Code:
Wäre super wenn jemand die Lösung kennt.
# Infotext
# Infotext # Infotext stream = 1 bitrate = 128 #Hier_nicht_mehr typ = mp3 ... |
AW: Memo befüllen in Timer = leer
Moin...:P
Wo setzt du den Timer auf True? Im OI oder über Code? Was hat
Delphi-Quellcode:
für einen Sinn? Wie sieht die Variable Time aus? :gruebel:
if time = 0 then
...im Prinzip sieht es danach aus, das du die Funktion des Timers nicht verstanden hast oder den Timer mißbrauchst. :? Ich habe das Gefühl, das zu einer fetsgelegten Zeit etwas ausführen möchtest. :gruebel: |
AW: Memo befüllen in Timer = leer
Der Timer ist aktiv?
[Edit] Time ist nicht zufällig das Time aus der SysUtils? Wenn doch, dann schäm dich, für einen "genauen" Vergleich mit einem Float und dem extrem unwahrscheinlichen Fall, dass diese Zeile genau auf die Millisekunde um Mitternacht ausgeführt wird. Wo wird r initialisiert? Warum die Variable r und nicht einfach ![]() Pos<>0 ... ContainsText bzw. ContainsStr oder StartsText bzw. StartsStr > ![]() |
AW: Memo befüllen in Timer = leer
Der Timer Timer1 ist über einen Button aktivert worden das geht ja alles wie gesagt auch das, was noch nach der For Schleife kommt wird umgesetzt genauso wie das davor.
time ist einer Zähler der beim Button klick auf 10 gesetzt wird und mit jedem Timer1 Event um 1 runtergezählt wird. r ist ein Integer und dient mir als Schranke damit das Programm weiß ok r = 1 also Zeile nicht mehr hinzufügen. Das Funktioniert auch super Problem ist eben nur, dass es in der procedur TForm1.Timer1Timer nicht mehr geht. Bei FormShow oder direkt bei Button1.Click funktioniert der Code auch. |
AW: Memo befüllen in Timer = leer
Moin...:P
Zitat:
PS: time ist eine denkbar ungünstige Benamsung der Variable... Siehe himitsu: ![]() PS1: Das kommt von der nicht Benutzung von sprechenden Variablen wie time oder r. Die Kollidierung mit Systemvariablen kann dann nicht passieren...:wink: PS2: Einen Couter würde ich statt den falschem time in CurrentStep (oder so) umbenennen. :wink: |
AW: Memo befüllen in Timer = leer
Mal im Debugger gefragt, ob diese Bedingung überhaupt erfüllt ist?
Delphi-Quellcode:
if time = 0
Time ist übrigens die akuelle Uhrzeit, es sei denn, es gibt eine globale Variabel gleichen Namens, was aber äußerst ungünstig wäre. Bitte bennne die Variabel Time um, um Fehler durch Namenskonflikte ausschließen zu können.
Delphi-Quellcode:
Wenn bei dem von mir geänderten Quelltext das Memo1 immer leer ist, dann ist die Bedingung time = 0 nicht erfüllt.
Memo1.Clear;
if time = 0 then begin Timer1.Enable := false; Memo1.Lines.LoadFromFile('dateiname'); Memo2.Clear; for i := 0 to Memo1.Lines.Count-1 do begin if (Pos('#Hier_nicht_mehr', Memo1.Lines[i]) <> 0) and (r = 0) then r := 1; if r = 0 then Memo2.Lines.Add(Memo1.Lines[i]); end; end; Der Fehler liegt höchstwahrscheinlich nicht in der For-Schleife, sondern entweder im Timerhandling oder in der Programmlogik des Timerereignisses irgendwo vor Timer1.Enable := false; |
AW: Memo befüllen in Timer = leer
Delphi-Quellcode:
Warum nicht...
if (Pos('#Hier_nicht_mehr', Memo1.Lines[i]) <> 0) and (r = 0) then
r := 1; if r = 0 then Memo2.Lines.Add(Memo1.Lines[i]);
Delphi-Quellcode:
if Pos('#Hier_nicht_mehr', Memo1.Lines[i]) > 0 then
Break // Schleife beenden statt den Quatsch mit r := und if r = zu machen else Lines.Add(Memo1.Lines[i]); |
AW: Memo befüllen in Timer = leer
Delphi-Quellcode:
Ich hoffe 'dateiname' ist ein vollständiger Dateiname mit Pfad.
Memo1.Lines.LoadFromFile('dateiname');
Ansonsten ist es zufall ob deine Datei (neben der Exe) genommen wird. |
AW: Memo befüllen in Timer = leer
Und wie/wo ist r vorbelegt worden?
wenn
Delphi-Quellcode:
dann kannst Du das alles in die Tonne kloppen!
r=4
Gruß K-H |
AW: Memo befüllen in Timer = leer
Also, im Prinzip wurden ja alle Möglichkeiten schon mehrmals genannt
und es gibt nur 3 Problemzonen und eine Aufgabenstellung, die nun endlich mal geklärt werden sollten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz