Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Change nur bei Sender=? (https://www.delphipraxis.net/10901-change-nur-bei-sender%3D.html)

mandumoal 27. Okt 2003 17:23


Change nur bei Sender=?
 
Hi!
Der Titel ist etwas irreführend aber mir ist kein besserer eingefallen.

Mein Problem:

Ich habe Edits die alle das selbe OnChange Ereignis haben.
Jetzt will ich aber dieses Ereignis nur ausführen wenn es nicht durch ein bestimmtes Objekt ausgelöst wurde.
Sprich, Ich will im OnChange abfragen wer das Ereignis ausgelöst hat.
Geht das überhaupt?
Hat das was mit Sender : TObject zu tun?

Ich habs mal so probiert:

Delphi-Quellcode:
 procedure TForm.EditChange(Sender : TObject);
begin
 if sender = lala(name einer kompo) then begin;
  machnix;
 end
 else begin
  machwas;
 end;
aber das geht hinten und vorne nicht...

Was mache ich hier falsch oder geht das so garnicht?

mfg mandumoal

Niko 27. Okt 2003 17:44

Re: Change nur bei Sender=?
 
Wenn lala wirklich eine der aufrufenden Komponenten ist, stimmt der Code (bis auf den Strichpunkt hinter begin).

mirage228 27. Okt 2003 17:50

Re: Change nur bei Sender=?
 
Hi,

versuchs mal mit

Delphi-Quellcode:
procedure TForm.EditChange(Sender : TObject);
begin
  if sender = Edit1 then // oder wie auch immer das 'besondere' Edit heisst :-D
  begin
    machnix;
  end else
  begin
    machwas;
  end;
end;
mfG
mirage228

phlux 27. Okt 2003 18:24

Re: Change nur bei Sender=?
 
Servus! :hi:
Angenommen du hast 2 Editfelder (Edit1 und Edit2) auf der Form (Form1) und ein OnChange-Ereignis (ich nenne es pauschal Change). Dann sieht der Code wie folgt aus:
Delphi-Quellcode:
procedure TForm1.Change(Sender: TObject);
begin
  If (Sender as TEdit).Name = 'Edit1' then
  begin
    //Das was passiert wenn Sender Edit1 ist, hier rein
  end else
  If (Sender as TEdit).Name = 'Edit2' then
  begin
    //Das was passiert wenn Sender Edit2 ist, hier rein
  end;
end;
mfg phlux :hi:

Edit: allerdings funzt Mirage seine Variante auch ;)

mandumoal 28. Okt 2003 12:27

Re: Change nur bei Sender=?
 
Hi!

Ich weiss nicht ob ihr mich falsch verstanden habt oder es gar nichth geht, aber:

Der Sender in euren Beispielen ist immer einer der auch ein onChange Ereignis hat.
Also entweder Edit1 oder Edit2 (bei mirage)

Aber bei mir wird die Änderung praktisch durch ein TStringGrid.OnSelectCell verursacht.
also es verändert die Edit.Texte.
Jetzt möchte ich aber das das was in OnChange steht nur passiert wenn die Texte von Hand verändert wurden.
Ich könnte das auch mit KeyDown KeyPress.. der Edits machen müsste aber dann soviele Zeichen abfragen, bei denen nichtss passieren soll.

Ich hoffe ihr habt es jetzt so verstanden wie ich es "vermitteln" wollte...

mfg mandumoal

Sharky 28. Okt 2003 12:46

Re: Change nur bei Sender=?
 
Hai mandumoal,

du könntest einfach das OnChange ereigniss beim "betreten" des Edits entfernen und beim verlassen wieder verbinden:

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject); //OnChange für das Edit
begin
 //Mache was
end;

procedure TForm1.Edit1Enter(Sender: TObject); //Edit erhält den Focus
begin
 (Sender As TEdit).OnChange := nil;
end;

procedure TForm1.Edit1Exit(Sender: TObject); //Edit verliert den Focus
begin
 (Sender As TEdit).OnChange := Edit1Change;
end;

mirage228 28. Okt 2003 12:59

Re: Change nur bei Sender=?
 
oder...

Delphi-Quellcode:
procedure EditChange(Sender: TObject);
begin
  if not (Sender is TEdit) then Exit;
  // ....
end;
Wenn die Prozedur von einem nicht-edit ausgelöst wird, dann wird die prozedur sofort verlassen

mfG
mirage228

mandumoal 28. Okt 2003 13:14

Re: Change nur bei Sender=?
 
Danke @ all !!:spin:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.

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