Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Label => "Change" (https://www.delphipraxis.net/96697-label-%3D-change.html)

Tommy1988 29. Jul 2007 11:15


Label => "Change"
 
Hallo alle.

Ein Edit hat eine "Change" eingeschaft.

Kann man soetwas "indirekt" auch irgentwie mit einem Label veranschaulichen?

Ich habe einen Timer der überprüfen sollte ob das Caption eines Labels sich ändert.
Nur habe ich keine Ahnung wie :?

mkinzler 29. Jul 2007 11:17

Re: Label => "Change"
 
Merke dir doch den Inhalt und überprüfe den mit dem aktuellen.

Tommy1988 29. Jul 2007 11:18

Re: Label => "Change"
 
mhh.. ich probiers grade mal
Edit:

Hab nen kleinen Hänger, deswegen ist die Zeile X so doof:

Delphi-Quellcode:
if OldString = OldString then // Zeile X
 begin
  // Zeile Y , nix tun weil OldString immernoch gleich OldString ist
 end else
  begin
  ListBox1.Items.Add(OldString) // Das hier könnte ja wenn Zeile X nicht doof wär bei zeile Y stehen
  end;

scrat1979 29. Jul 2007 11:37

Re: Label => "Change"
 
Zitat:

Zitat von Tommy1988
mhh.. ich probiers grade mal
Edit:

Hab nen kleinen Hänger, deswegen ist die Zeile X so doof:

Delphi-Quellcode:
if OldString = OldString then // Zeile X
 begin
  // Zeile Y , nix tun weil OldString immernoch gleich OldString ist
 end else
  begin
  ListBox1.Items.Add(OldString) // Das hier könnte ja wenn Zeile X nicht doof wär bei zeile Y stehen
  end;

Was Du uns da sagen möchtest verstehe ich ehrlich gesagt überhaupt nicht, aber was Dein Problem angeht versuch doch folgendes:

Delphi-Quellcode:
[...]
type
  TForm1 = class(TForm)
[...]
  public
    { Public-Deklarationen }
    OldCaption : String;
  end;

[...]
procedure TForm1.TimerTimer(Sender: TObject);
begin
 { Wenn Variable OldCaption noch nicht gesetzt }
 if OldCaption = '' Then OldCaption := Label1.Caption;

 { Neue Caption? }
if Label1.Caption <> OldCaption Then Begin;
  ShowMessage('Label1.Caption wurde geändert!!!');
  OldCaption := Label1.Caption; // Neue Caption der Variablen zuweisen...
End;

end;
[...]
end.

Hawkeye219 29. Jul 2007 11:51

Re: Label => "Change"
 
Hallo,

der Trick ist immer der gleiche - eine nachträgliche Erweiterung des betreffenden Controls:

Delphi-Quellcode:
type
  TLabel = class (StdCtrls.TLabel)
  private
    FOnChange : TNotifyEvent;
    procedure CMTextChanged (var Message: TMessage); message CM_TEXTCHANGED;
  public
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

  TForm1 = class (TForm)
    {...}
    procedure FormCreate (Sender: TObject);
  private
    procedure LabelChanged (Sender: TObject);
  end;

procedure TLabel.CMTextChanged (var Message: TMessage);
begin
  inherited;
  if Assigned(FOnChange) then
    FOnChange (Self);
end;

procedure TForm1.FormCreate (Sender: TObject);
begin
  Label1.OnChange := LabelChanged;
end;

procedure TForm1.LabelChanged (Sender: TObject);
begin
  Self.Caption := (Sender as TLabel).Caption;
end;
Gruß Hawkeye

Tommy1988 29. Jul 2007 18:13

Re: Label => "Change"
 
Delphi-Quellcode:
procedure TForm1.Timer4Timer(Sender: TObject);
var
a: Integer;
begin
// Wenn Variable OldSongTitel noch nicht gesetzt
{if OldSongTitel = '' then
 begin }//
  OldSongTitel := InterpretTitel1.Caption;
// end;

// Neue Caption?
if InterpretTitel1.Caption <> OldSongTitel then
  begin
//  ShowMessage('Titel wurde geändert!!!');
      for a := 1 to 2 do
       begin
        ListBox1.Items.Add(OldSongTitel);
       end;
   // Neue Caption der Variablen zuweisen...
   OldSongTitel := InterpretTitel1.Caption;
  end;
end;
Ich blicke da nicht mehr durch..
Der timer steht auf 1000 ms.
Der Timer schreibt aber alle 1000ms OldSongTitel in die ListBox. Aber er soll das doch nur machen
wenn InterpretTitel1.Caption sich geändert hat.....

Namenloser 29. Jul 2007 18:40

Re: Label => "Change"
 
Delphi-Quellcode:
procedure TForm1.Timer4Timer(Sender: TObject);
begin
  // Caption geändert?
  if InterpretTitel1.Caption <> OldSongTitel then
    ListBox1.Items.Add(OldSongTitel);
  // Caption merken
  OldSongTitel := InterpretTitel1.Caption;
end;

Tommy1988 29. Jul 2007 18:56

Re: Label => "Change"
 
ohne es auszuprobieren behaupte ich jetzt mal, dass er dann aber alle 500 ms (timerintrval) den Text ins listBox macht.

ich habs jetzt UMSTÄNDLICH aber anders gemacht:

InterpretenText wird in ein edit gechrieben und wenn das edit 'gechanged' wird wid was in die listbox geschrieben.. so. umständlich, doof und blöd aber klappt.

Namenloser 29. Jul 2007 19:39

Re: Label => "Change"
 
Zitat:

Zitat von Tommy1988
ohne es auszuprobieren behaupte ich jetzt mal, dass er dann aber alle 500 ms (timerintrval) den Text ins listBox macht.

Dann probiers halt aus und überzeug dich davon, dass es nicht so ist :lol:

Jelly 29. Jul 2007 19:50

Re: Label => "Change"
 
Was soll denn der Quatsch mit dem Timer :wall:
Hawkeye bietet doch die wunderbare Lösung. Also erstell dir eine neue Komponente, installier sie in ein Package und nutze diese neue Label.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 1 von 2  1 2      

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