Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie Sender ermitteln ? (https://www.delphipraxis.net/7841-wie-sender-ermitteln.html)

Armageddon 22. Aug 2003 16:18


Wie Sender ermitteln ?
 
Hi,

hoffe der Titel stimmt wenigstens etwas zu dem was jetzt kommt.

Habe ein paar Editfelder und in diese kann ich mit Mausrechtsklick per Einfügen aus dem PopUpMenu paar Zahlen einfügen.

Nun hab ich hier im Forum mal gesucht und auch was in der Art was ich meine glaub auch gefunden aber ich steig da nicht ganz durch. :freak:


bis jetzt ist es so (also nur der einfügen Codeteil !):

Delphi-Quellcode:
if PopUpMenu1.PopupComponent = Innendurchmesser then
begin
  Innendruchmesser.Text := Ausgabe;
end;
if PopupMenuComponent = Querbohrdurchmesser then
begin
  Querbohrdurchmesser.Text := Ausgabe;
end;
usw. da kommen dann noch ein paar. Aber das was eingefügt wird ist immer in der Variable "Ausgabe".

So nun wollt ich wissen ob man das nicht auch kürzer machen kann. Quasi ein Satz für alle Edit's die davon betroffen sind.

So auf die Art wie das hier hab ich mir gedacht:

Delphi-Quellcode:
PopupComponent.Text := Ausgabe;
und fertig. Aber irgendwie mach ich da wohl nen Denkfehler. Aber anderseits wenn ich 100 Editfelder habe dann müßte ich ja 100 mal if bnla bla bla then usw. schreiben da wird man ja Wahnsinnig. (bin ich eh schon aber egal).

Please Help me.

Gruß Arma.


Hoppla was schreib den ich da fürt nen Käse, nicht PopupComponent sonder halt das Editfeld als Sender und Empfänger. Ich hoffe Ihr wißt wie ich das meine.

Matze 22. Aug 2003 16:21

Re: Wie Sender ermitteln ?
 
Wenn du ein array nimmst, dann müsste es gehen.

Code:
Zahlen: array[1..irgendeineZahl] of TEdit;

...

Zahlen[integer-Variable]:=TEdit.Create;
Gruß Matze

Matze 22. Aug 2003 16:24

Re: Wie Sender ermitteln ?
 
Oder:

Alle EditFelder markieren und dann im OI bei Ereignisse z.B. auf OnChange doppelklicken und dann das hier einfügen:

Code:
if Sender=Edit1 then...
if Sender=Edit2 then...

Armageddon 22. Aug 2003 16:28

Re: Wie Sender ermitteln ?
 
Hi Matze,

ähm also genau das wollte ich ja nicht machen mit den ganzen if Abfragen.
Geht das den nicht kürzer?

und da hatte ich noch nen Fehler hab die Hälfte beim zweiten if Popup usw. vergessen.

Delphi-Quellcode:
if PopUpMenu1.PopupComponent = Innendurchmesser then
begin
  Innendruchmesser.Text := Ausgabe;
end;
if PopupMenu1.PopupComponent = Querbohrdurchmesser then
begin
  Querbohrdurchmesser.Text := Ausgabe;
end;

Basilikum 22. Aug 2003 16:33

Re: Wie Sender ermitteln ?
 
die 1-Zeiler-Variante:
Delphi-Quellcode:
(PopUpMenu1.PopupComponent as TEdit).Text := Ausgabe;

Armageddon 22. Aug 2003 16:41

Re: Wie Sender ermitteln ?
 
Wow,

ich bin sprachlos. Danke Basilikum. Das ist genau das was ich gesucht habe. :hello:

Perfekt. Nun kann ich weiter :coder: und mir nen Haufen Zeilen im Programm sparen.


Arma sagt Dankschääää :dancer:

Matze 22. Aug 2003 16:45

Re: Wie Sender ermitteln ?
 
Sorry für meine Posts! :duck:

Armageddon 22. Aug 2003 16:49

Re: Wie Sender ermitteln ?
 
Nix passiert Matze.

Ist doch ok. Wir versuchen uns ja alle Gegenseitig zu helfen.

:love: Hab euch doch alle lieb.

Armageddon 22. Aug 2003 18:09

Re: Wie Sender ermitteln ?
 
Hmmm hab nun nochmal ein Prob das genau mit dem zusammenhängt!

Kann ich das mit dem Component as bla bla bla auch mit dem Code machen:

Delphi-Quellcode:
procedure TForm1.Z_PositionKeyPress(Sender: TObject; var Key: Char);
var
  Position: Integer;
  Stellenpuffer: String;
  Zeichenpuffer: String;
  Stellenanzahl: Integer;
begin
  Komma := False;
  Zeichenpuffer := Z_Position.Text;
  if Pos(',', Zeichenpuffer) > 0 then Komma := True;
  if (Komma = True) and (Key = #44) then Key := #0;
  if (Komma = True) and (Key = #46) then Key := #0;
  if (Komma = False) and (Key = #46) then Key := ',';
  if Z_Position.SelStart < Pos(',', Z_Position.Text) then
  else
  if Pos(',', Zeichenpuffer) > 0 then
    begin
    Stellenanzahl := Length(Zeichenpuffer);
    Position := Pos(',', Zeichenpuffer);
    Stellenpuffer := Copy(Zeichenpuffer, Position+1, Stellenanzahl-Position);
    Stellenanzahl := Length(Stellenpuffer);
    if Stellenanzahl = 3  then
    begin
      if (Key in [#44, #46, #48..#57]) then Key := #0
    end;
  end;
  if Z_Position.SelStart < Pos('-', Z_Position.Text) then
    begin
    if (Key in [#48..#57]) then Key := #0;
    end;
  if Key = #13 then Key := #0;
  if not (Key in [#8, #44..#46, #48..#57]) then Key := #0;
  if Z_Position.SelStart = 0 then
    begin
    if Key = #45 then Key := #45;
    end;
  if Z_Position.SelStart > 0 then
    begin
    if Key = #45 then Key := #0
    end;
  if Pos('-', Z_Position.Text) > 0 then
    begin
    if Key = #45 then Key := #0
    end;
end;
Hab von demselben 8 Stück in meinem Programm aber ändern würde sich immer nur das Z_Position.*** weil das ja je nach aktivem Editfeld wo ich reinschreibe nen andern Namen hat.

Wär für jede Hilfe dankbar.


Gruß Arma.

Niko 22. Aug 2003 20:00

Re: Wie Sender ermitteln ?
 
Zitat:

Zitat von Armageddon
Kann ich das mit dem Component as bla bla bla auch mit dem Code machen:

Ja, einfach Z_Position durch (Sender as TEdit) ersetzen.

Armageddon 23. Aug 2003 09:22

Re: Wie Sender ermitteln ?
 
Ok Niko,

ich Versuch mal ob ich es hinkriege.
Das ich das Z_Position.Text durch (........ as TEdit).Text ersetzen kann habe ich mir auch schon gedacht.

Bin nur noch nicht ganz sicher wegen dem Z_Position.SelStart !

Will die Procedure ja für mehrer Edit's verwenden.

Querbohrdurchmesser.Text
Z_Position.Text
Y_Versatz.Text
Wirkdurchmesser.Text
Bohrdurchmesser.Text

Das sind se. Aber damit ich nicht bei jedem den ganze Kladeradatsch schreiben muß dachte ich mir wie mach ich es kürzer. Ne Function oder so aber da ist mir dann nach ner Weile die Puste ausgegangen. :mrgreen:

Nen Beispiel fänd ich fein. :coder:

Gruß Arma.

kiar 23. Aug 2003 11:31

Re: Wie Sender ermitteln ?
 
dann gibst du jedem edit im tag einen wert an und ermittelst diesen über
Delphi-Quellcode:
(sender as Tedit).tag
raik

Niko 23. Aug 2003 17:29

Re: Wie Sender ermitteln ?
 
Delphi-Quellcode:
procedure TForm1.EditsKeyPress(Sender: TObject; var Key: Char);
var
  Position: Integer;
  Stellenpuffer: String;
  Zeichenpuffer: String;
  Stellenanzahl: Integer;
begin
  Komma := False;
  Zeichenpuffer := (Sender as TEdit).Text;
  if Pos(',', Zeichenpuffer) > 0 then Komma := True;
  if (Komma = True) and (Key = #44) then Key := #0;
  if (Komma = True) and (Key = #46) then Key := #0;
  if (Komma = False) and (Key = #46) then Key := ',';
  if (Sender as TEdit).SelStart < Pos(',', (Sender as TEdit).Text) then
  else
  if Pos(',', Zeichenpuffer) > 0 then
    begin
    Stellenanzahl := Length(Zeichenpuffer);
    Position := Pos(',', Zeichenpuffer);
    Stellenpuffer := Copy(Zeichenpuffer, Position+1, Stellenanzahl-Position);
    Stellenanzahl := Length(Stellenpuffer);
    if Stellenanzahl = 3  then
    begin
      if (Key in [#44, #46, #48..#57]) then Key := #0
    end;
  end;
  if (Sender as TEdit).SelStart < Pos('-', (Sender as TEdit).Text) then
    begin
    if (Key in [#48..#57]) then Key := #0;
    end;
  if Key = #13 then Key := #0;
  if not (Key in [#8, #44..#46, #48..#57]) then Key := #0;
  if(Sender as TEdit).SelStart = 0 then
    begin
    if Key = #45 then Key := #45;
    end;
  if (Sender as TEdit).SelStart > 0 then
    begin
    if Key = #45 then Key := #0
    end;
  if Pos('-', (Sender as TEdit).Text) > 0 then
    begin
    if Key = #45 then Key := #0
    end;
end;
Diese Prozedur weist du einfach jedem Edit als OnKeyPress-Ereignis zu - fertig.

Erklärung:
Sender verweist immer auf das Objekt, das die Ereignisprozedur aufgerufen hat - in diesem Fall ein Edit. Nach einer Typumwandlung mit "as TEdit", "as TLabel", etc. kannst du dann auf alle Eigenschaften und Methoden des aufrufenden Objekts zugreifen.

Armageddon 23. Aug 2003 18:16

Re: Wie Sender ermitteln ?
 
Cool,

danke Niko.

Wie es der Zufall will habe ich genau das was Du geschrieben hast selber gemacht. :coder: Wollte nur nochmal wegen dem .tag hier reinschauen weil ich das nicht ganz nachvollziehen kann. Das mit dem Sender ist ja eigentlich logisch.

Besten Dank

Arma.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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