Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfragen welche Action ausgelöst wurde (https://www.delphipraxis.net/51251-abfragen-welche-action-ausgeloest-wurde.html)

missi 9. Aug 2005 09:21


Abfragen welche Action ausgelöst wurde
 
habe auf meiner Hauptform eine TActionList mit 2 Actions
1. Bearbeiten
2. Hinzufügen

ich möchte dies in einer nebenform abfragen. welche action ausgelöst wurde.

nur so springt er mir über meine if-abfrage und gibt an das in sender nichts drin steht.

Delphi-Quellcode:
if Sender = fMain.TAEinfuegen then
begin
   if fMain.TB1.Locate('Seriennummer', EdtSerial.Text, []) = False then
   begin
      EString := 'INSERT INTO ....';
   end
   else begin
      ShowMessage('Seriennummer ist schon vorhanden!');
      ModalResult := mrNone;
      Exit;
    end;
end
else if Sender = fMain.TABearbeiten then
begin
   EString := 'UPDATE ....';
end;

fMain.DBCom.CommandText := EString;
fMain.DBCom.Execute;
im vorraus vielen dank

lg missi

marabu 9. Aug 2005 09:40

Re: Abfragen welche Action ausgelöst wurde
 
Hi missi,

wenn du deine Actions einem MenuItem oder Button zuweist, dann wird dort im Ereignis OnClick() deine Action ausgeführt - der Sender ist dann die Komponente, deren OnClick-Handler getriggert wurde.
Wenn du eine Art Command-Log schreiben willst, dann mache das doch gleich im Action-Code.

Grüße vom marabu

missi 9. Aug 2005 09:46

Re: Abfragen welche Action ausgelöst wurde
 
:wiejetzt:
also *verpeiltschaut*

ich rufe durch die actionlist die gleiche nebenform auf
und die form soll abfragen woher der klick kam wenn man im nebenform auf ok klickt.

versteh nicht ganz wie ich das in die actionlist integrieren soll bzw im source.

marabu 9. Aug 2005 09:57

Re: Abfragen welche Action ausgelöst wurde
 
Durch deine ActionList rufst du gar nichts auf - du hast Actions, und die werden normalerweise von einer Benutzerin ausgelöst, indem die irgendwelche Bedien-Elementen deiner Programmoberfläche mit der Maus traktiert.

Im Action-Code, der bei dir wahrscheinlich auf fMain beheimatet ist, erledigst du was zu erledigen ist. Wie wird denn der von dir gezeigte Code auf der NebenForm aktiviert?

marabu

missi 9. Aug 2005 10:02

Re: Abfragen welche Action ausgelöst wurde
 
durch meine ok button von der nebenform


Delphi-Quellcode:
procedure TfmAddSNr.BtnAddSerialClick(Sender: TObject);
var
  EString: String;
begin
  if (EdtSerial.Text <> '') and (EdtDescription.Text <> '') then
  begin
    if MEdtDate.Text <> ' . .   ' then
    begin
      try
      StrToDate(MEdtDate.Text);
      except
        ShowMessage('Ungültiges Datum wurde angegeben!');
        ModalResult := mrNone;
        Exit;
      end;
        if Sender = fMain.TAEinfuegen then
        begin
          if fMain.TB1.Locate('Seriennummer', EdtSerial.Text, []) = False then
         .
         .
         .
end;

marabu 9. Aug 2005 11:59

Re: Abfragen welche Action ausgelöst wurde
 
Wenn ich das richtig erkenne, dann hast du ein Hauptfenster fMain mit einer ActionList und Actions, sowie einen Dialog fmAddSNr mit Eingabefeldern und zwei Buttons zum Hinzufügen und Ändern eines Datensatzes.

Dem Schalter BtnAddSerial hast du per Object Inspector einen Handler für das Ereignis OnClick() zugewiesen. Wie soll da eine Beziehung zur Action fMain.TAEinfuegen existieren?

Normalerweise entwirfst du deine Forms und Dialogfenster, packst deine Bedienelemente drauf und eine ActionList. Wenn du den Code für deine Actions geschrieben hast, dann ordnest du die Action den gewünschten Bedienelementen (Schalter, MenuItem, ...) zu. Du darfst dann keine OnClick-Handler erstellen. Eigentlich hätte ich erwartet, dass du TAEinfuegen der Eigenschaft BtnAddSerial.Action zuweist, aber ich sehe nur den OnClick-Handler. Du musst dich entscheiden, eines oder das andere, beides geht nicht. Die "bessere" Lösung ist auf jeden Fall die Action, und in deren Code brauchst du nicht zu fragen, ob sie getriggert wurde...

marabu

missi 9. Aug 2005 13:10

Re: Abfragen welche Action ausgelöst wurde
 
versteh zwar nur die hälfte aber habe eine lösung gefunden

Delphi-Quellcode:
procedure TfMain.TABearbeitenExecute(Sender: TObject);
begin
  fmAddSNr.EdtSerial.Text := TB1.FieldByName('Seriennummer').AsString;
  fmAddSNr.EdtDescription.Text := TB1.FieldByName('Bezeichnung').AsString;
  fmAddSNr.MEdtDate.Text := TB1.FieldByName('Ablaufdatum').AsString;

  fmAddSNr.ShowModal;
  if fmAddSNr.ModalResult = mrOK then
    UpdateData(1)
end;

procedure TfMain.TAEinfuegenExecute(Sender: TObject);
begin
  fmAddSNr.ShowModal;
  if fmAddSNr.ModalResult = mrOK then
    UpdateData(0)
  end;
ich übergebe einfach meiner funktion die id 1 || 0 und weiss daher woher er kam.

what für nen chaos lach

thx nochmal für die schnelle antwort

lg ela


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.

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