Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Edit.text 5 mal Blinken lassen (https://www.delphipraxis.net/179208-edit-text-5-mal-blinken-lassen.html)

DeddyH 20. Feb 2014 12:45

AW: Edit.text 5 mal Blinken lassen
 
Schau Dir doch meinen Code von hier noch einmal an. Da könnte man doch noch ein privates Feld hinzufügen.
Delphi-Quellcode:
private
    { Private-Deklarationen }
    FOriginalString: string;
    FCounter: integer;
    FEditDasBlinkenSoll: TEdit; // <-- 1 2 3 keine Hexerei
    procedure Blink;

Natcree 20. Feb 2014 13:11

AW: Edit.text 5 mal Blinken lassen
 
Danke für die Hilfe und da ich Faul und unverbesserlich bin habe ich es so gemacht

Delphi-Quellcode:
procedure TForm3.SpielerKeyPress(Sender: TObject; var Key: Char);
var
Spieler:TEdit;
begin
  Spieler:=TEdit(Sender);
  st:=Tstringlist.Create;
  st.Add(Spieler.text);
  st.Add((Sender as TComponent).Name);
  if Key = #13 then
  begin
    key := #0;//schalt sound ab
    Timer1.Interval := 500;
    Timer1.Enabled := true;
  end;
end;

procedure TForm3.Timer1Timer(Sender: TObject);
var
Spieler: TEdit;
begin
  Spieler := TEdit(FindComponent(st.Strings[1]));
  if Spieler.Text = st.Strings[0] then Spieler.text := '' else
  if Spieler.text = ''           then Spieler.Text := st.Strings[0];
  Timer1.Tag := Timer1.tag+1;
  if Timer1.Tag = strtoint(st.Strings[0])*2 then Timer1.Enabled := false;
  if Timer1.Enabled=false then st.Free;
  if Timer1.Enabled=false then Timer1.Tag:=0;
end;

DeddyH 20. Feb 2014 13:15

AW: Edit.text 5 mal Blinken lassen
 
Da bin ich mal gespannt, wieviel Tasten Du drücken kannst, bevor Dir der Speicher ausgeht.

himitsu 20. Feb 2014 13:19

AW: Edit.text 5 mal Blinken lassen
 
Zitat:

Delphi-Quellcode:
  Spieler:=TEdit(Sender);
  st.Add(Spieler.text);

  st.Add((Sender as TComponent).Name);

Man könnte sich natürlich für eine Variante entscheiden und Beides "gleich" behandeln.


Zitat:

Delphi-Quellcode:
  if Spieler.Text = st.Strings[0] then Spieler.text := '' else
  if Spieler.text = ''           then Spieler.Text := st.Strings[0];

Wozu der zweite Vergleich?

Zitat:

Delphi-Quellcode:
  if Timer1.Tag = strtoint(st.Strings[0])*2 then Timer1.Enabled := false;

Ich dachte in
Delphi-Quellcode:
st.Strings[0]
steht der alte Text und nicht die Anzahl?

Ach ja, den StringListe könnte man natürlich im OnCreate erstellen und im OnDestroy freigeben.
Oder man verwendet gleich zwei einzelne String-Konstanten (oder, halt einen String und einen Objektzeiger).

Zitat:

Da bin ich mal gespannt, wieviel Tasten Du drücken kannst, bevor Dir der Speicher ausgeht.
Bei jedem Tastendruck wird eine neue Stringliste erstellt, aber nur die "Letzte" gibst du wieder frei.
Und natürlich ist dann auch der "alte" Text weg, wenn man grade dann nochmal drückt, während der Text grade ausgeblendet ist.

Das
Delphi-Quellcode:
if ... = false
wurde doch bestimmt auch schon mehrmals erwähnt?

Sir Rufo 20. Feb 2014 13:30

AW: Edit.text 5 mal Blinken lassen
 
Zitat:

Zitat von DeddyH (Beitrag 1248781)
Da bin ich mal gespannt, wieviel Tasten Du drücken kannst, bevor Dir der Speicher ausgeht.

Ein gutes Auto braucht viel Sprit und ein gutes Programm braucht viel Speicher.

Ich würde dieses Problem generell lösen.

Es gibt da also etwas, was innerhalb eines bestimmten Zeit-Intervalls x mal wiederholt werden soll.
Delphi-Quellcode:
TTimedActionItem = class
  property Interval : cardinal;
  property Count : cardinal;
  property OnExecute : TNotifyEvent;
  procedure Trigger;
end;

TTimedActions = class
  property ActionCount : Integer;
  property Actions[index:Integer] : TTimedActionItem;
  procedure AddAction( Action : TTimedActionItem );
  procedure Trigger;
end;

procedure TTimedActions.Trigger;
var
  LIdx : integer;
begin
  for LIdx := 0 to ActionCount - 1 do
    Actions[LIdx].Trigger;
end;
Einen Timer an TTimedActions.Trigger verdrahtet und die ActionItems feuern dann, wenn denen danach ist.

DeddyH 20. Feb 2014 13:33

AW: Edit.text 5 mal Blinken lassen
 
Und dann die TTimedActions-Instanz in einer Stringliste ablegen :mrgreen:

baumina 20. Feb 2014 13:49

AW: Edit.text 5 mal Blinken lassen
 
was passiert eigentlich so speichermäßig genau wenn man folgendes macht?

Delphi-Quellcode:
  SL := TStringList.Create;
  SL.Add('test');
  SL := TStringList.Create;
  SL := TStringList.Create;
  SL := TStringList.Create;

DeddyH 20. Feb 2014 13:51

AW: Edit.text 5 mal Blinken lassen
 
Damit hast Du 4 Stringlist-Instanzen, von denen Du noch eine ansprechen und freigeben kannst, der Rest verbraucht nur noch Speicher und bringt Dir nichts.

himitsu 20. Feb 2014 14:00

AW: Edit.text 5 mal Blinken lassen
 
Ausprobieren?
Delphi-Quellcode:
  ReportMemoryLeaksOnShutdown := True;
  SL := TStringList.Create;
  SL.Add('test');
  SL := TStringList.Create;
  SL := TStringList.Create;
  SL := TStringList.Create;
  ShowMessage(SL.Text);
  SL.Free;
4 Speicherlecks (die ersten 3 Stringlisten und der eine String)

Natcree 20. Feb 2014 14:21

AW: Edit.text 5 mal Blinken lassen
 
also sollte ich die Tstringliste nur in der Form create setzen damit siw nur einmal erstellt wird.
Mit dem st.free gebe ich nur die gespeichert strings frei richtig wäre das so etwas korreker...???


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz