Delphi-PRAXiS
Seite 2 von 4     12 34      

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 11:59

AW: Edit.text 5 mal Blinken lassen
 
Wozu eigentlich eine Stringliste? Ich würde das ungefähr so angehen:
Delphi-Quellcode:
type
  TfrmBlinkDemo = class(TForm)
    edtBlink: TEdit;
    tmrBlink: TTimer;
    btnBlink: TButton;
    procedure tmrBlinkTimer(Sender: TObject);
    procedure btnBlinkClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FOriginalString: string;
    FCounter: integer;
    procedure Blink;
  public
    { Public-Deklarationen }
  end;

...

const
  BLINKCOUNT = 5;

{ TfrmBlinkDemo }

procedure TfrmBlinkDemo.Blink;
begin
  FCounter := 0;
  FOriginalString := edtBlink.Text;
  tmrBlink.Enabled := true;
end;

procedure TfrmBlinkDemo.btnBlinkClick(Sender: TObject);
begin
  Blink;
end;

procedure TfrmBlinkDemo.tmrBlinkTimer(Sender: TObject);
begin
  inc(FCounter);
  if Odd(FCounter) then
    edtBlink.Text := ''
  else
    edtBlink.Text := FOriginalString;
  if FCounter >= BLINKCOUNT * 2 then
    tmrBlink.Enabled := false;
end;

himitsu 20. Feb 2014 12:01

AW: Edit.text 5 mal Blinken lassen
 
Und seit 2009 kann man auch alles in Chinesisch schreiben, womit man dann mehr als nur 26 "Namen" zur Verfügung hat.

Natcree 20. Feb 2014 12:01

AW: Edit.text 5 mal Blinken lassen
 
lol Danke:) immer diese iron.......... .

Noch ne andere Frage

Ich erstelle in der FORM3 :) 20 TEDIT Komponenten.
nun sollen diese bei keypress die Timer Komponenten auslösen

Delphi-Quellcode:
procedure TForm3.SpielerKeyPress(Sender: TObject; var Key: Char);
var
Spieler:TEdit;
begin
    Spieler:=TEdit(Sender);
    st:=Tstringlist.Create;
    st.Add(Spieler.text);
    if Key = #13 then
    begin
    key := #0;//schalt sound ab
    Timer1.Interval := 500;
    timer1.Enabled:=true;
    end;
end;
Delphi-Quellcode:
procedure TForm3.Timer1Timer(Sender: TObject);
begin
//habe es hier auch schon mit Spieler:=TEDIT(Sender)( versucht) und edit1 mit Spieler ersetzt
//klappt aber nicht
if Edit1.Text = st.Strings[0] then Edit1.text := '' else
if Edit1.text = ''           then Edit1.Text := st.Strings[0];
timer1.Tag := Timer1.tag+1;
if timer1.Tag = strtoint(st.strings[0])*2 then timer1.Enabled := false;
end;
Wie Übergebe ich hier Statt edit1.text den sender der den Timer ausgelöst hat?

himitsu 20. Feb 2014 12:09

AW: Edit.text 5 mal Blinken lassen
 
Indem du dir den "Sender" merkst?

Zitat:

Delphi-Quellcode:
procedure TForm3.Timer1Timer(Sender: TObject);
begin
//habe es hier auch schon mit Spieler:=TEDIT(Sender)( versucht) und edit1 mit Spieler ersetzt

Kein Wunder.

Rate mal, wer dieses Ereignis auslöst und demnach in diesem Sender drin steht?

Delphi-Quellcode:
ShowMessage((Sender as TComponent).Name);
.

Wenn du dir nicht sicher bist, daß der Typ stimmt, dann verwende niemals harte Konvertierungen ala
Delphi-Quellcode:
TTyp(...)
, sondern nur weiche Konvertierungen ala
Delphi-Quellcode:
(... as TTyp)
:!:

DeddyH 20. Feb 2014 12:10

AW: Edit.text 5 mal Blinken lassen
 
Selber merken? Und ist Dir aufgefallen, dass Du bei jedem Tastendruck eine neue Stringliste erzeugst, die nirgends freigegeben wird?

Der schöne Günther 20. Feb 2014 12:18

AW: Edit.text 5 mal Blinken lassen
 
Wenn ich das richtig verstanden habe: Deine Edits teilen sich alle den gleichen Handler (SpielerKeyPress). Jetzt möchtest du mit dem jeweiligen Edit direkt bei Tastendruck einmal direkt machen, was der Timer normalerweise periodisch macht, oder erst beim nächsten Timer-Tick?

DeddyH 20. Feb 2014 12:25

AW: Edit.text 5 mal Blinken lassen
 
Wenn ich den Code richtig verstehe, soll mit einem "RETURN" im jeweiligen Edit der Timer aktiviert werden.

Natcree 20. Feb 2014 12:36

AW: Edit.text 5 mal Blinken lassen
 
Zitat:

Wenn ich den Code richtig verstehe, soll mit einem "RETURN" im jeweiligen Edit der Timer aktiviert werden.
Ja so ist es gemeint.

Habe jetzt den Sender in stringlist gespeichert.

und will ihm im Timer wieder nutzen

Delphi-Quellcode:
procedure TForm3.Timer1Timer(Sender: TObject);
var
Spieler:TEdit;
begin
Spieler.name:=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;
end;

Er gibt mir aber fehler aus

DeddyH 20. Feb 2014 12:41

AW: Edit.text 5 mal Blinken lassen
 
Natürlich, denn Du tust nicht das, was Du eigentlich meinst. Im Moment weist Du der Eigenschaft Name der nicht erzeugten Instanz Spieler einen Wert zu, möchtest aber doch eigentlich die Instanz ermitteln, die den Namen hat. Das ginge z.B. mit FindComponent oder FindControl, aber ich würde mir überlegen, wieso man den Namen speichern sollte, wenn man sich auch die Instanz selbst merken kann.

Natcree 20. Feb 2014 12:43

AW: Edit.text 5 mal Blinken lassen
 
Zitat:

wenn man sich auch die Instanz selbst merken kann.
Wie mache ich das?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 Uhr.
Seite 2 von 4     12 34      

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