Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi nichtvis. Kompo. ruft Formular auf -Zugriff auf Properties ? (https://www.delphipraxis.net/3120-nichtvis-kompo-ruft-formular-auf-zugriff-auf-properties.html)

APP 24. Feb 2003 15:02


nichtvis. Kompo. ruft Formular auf -Zugriff auf Properties ?
 
Hallo!

Ich versuche mich an meiner ersten Komponente, bin auch schon recht weit, habe aber ein Problem:

Meine Komponente besteht aus einem nichtvisuellen (FlappError.pas) Teil und einem Formular (FlappErrorDlg) einem Exceptiondialog.

Im nichtvisuellen Teil behandle ich die Exception(s) und die Properties (MailServerType, Hardcopy, Silent, ...) meiner Komponente.

Wenn nun ein Fehler abgefangen wurde, sammle ich die Daten und öffne das Fenster mit dem Exceptiondialog modal.

In diesem Fenster sind einige Buttons, u.a. der für "eMail Senden".
Nun möchte ich in Abhängigkeit des MailServerType-Properties (POP oder SMTP) eine eMail versenden.

In meinem Formular habe ich aber keinen Zugriff auf die Properties von FlappError.pas, ich kann nur auf die Typen, Konstanten und Variablen die dort deklariert sind zugreifen.

Im Moment helfe ich mir damit, dass ich die Properties die ich benötige über Variablen 'laufen' lasse, mir kommt dies aber nicht sehr elegant vor.

Kann mir jemand helfen?
Vielen Dank,
Armin

sakura 24. Feb 2003 15:29

Hi APP und herzlich willkommen,

es tut mir wirklich leid, aber ich verstehe nicht wirklich, was Du jetzt willst. Kannst Du ein bisschen genauer auf Dein Problem eingehen udn ggf. ein Code-Bsp. für die betreffenden Stellen liefern?

...:cat:...

APP 24. Feb 2003 16:07

Ups, gleich mein erstes Posting total verhaut :oops:

Ich hoffe mein Source ist besser lesbar als mein Text:

Delphi-Quellcode:
--------------------[nichtvisuelle Kompo FlappError.pas]----------------------
PUBLISHED
PROPERTY Options: TOptions READ FOptions WRITE FOptions; // Da steckt Silent drinnen
PROPERTY EmailOptions: TEmailOptions READ FEmailOptions WRITE SetEmailOptions; // Da steckt die eMailadresse drinnen
...

PROCEDURE TFlappError.ShowErrorDLG(sShort, sLong: STRING); // Dialog zeigen
BEGIN
   WITH fFlappErrorDlg DO
      BEGIN
         TRY
            ...
            re_simple.Text := sShort; // RichEdit auf Formular
            re_detail.Text := sLong; // RichEdit auf Formular
            Caption := 'ERROR in ' + sFILENAME;  
            Showmodal;
            ...
         FINALLY
            ...
         END;
      END;
END;
--------------------[Formular TfFlappErrorDlg ]----------------------
IMPLEMENTATION

USES FlappError;
....

PROCEDURE TfFlappErrorDlg.btn_eMailClick(Sender: TObject);
VAR
  aMessage                   : STRING;
  aBody                      : STRING;
BEGIN
  TRY
    aBody := (StringReplace(re_simple.Text, #13#10, '%0D%0A', [rfReplaceAll])) + '%0D%0A' +
      (StringReplace(re_detail.Text, #13#10, '%0D%0A', [rfReplaceAll]));
    aMessage := 'mailto:' + sEMAILADRESS + '?subject=' +
      Application.Title + '&body=' + Trim(aBody);
    ShellExecute(0, PChar('open'), PChar(aMessage), NIL, NIL, SW_SHOWNORMAL);
  EXCEPT
    IF NOT (opSilent) THEN
      ShowMessage('Can not send an eMail');
  END;
END;
sEMAILADRESS und opSilent sind nun Variablen von "FlappError.pas", da ich von der Formularunit "TfFlappErrorDlg.pas" nicht auf die Properties Options und EmailOptions zugreifen kann.


so, dass wäre nun geschafft,
Armin

P.S Nun habe ich auch gelernt, dass man NIEMALS in der Vorschauansicht des Forums den Back-Button des Browsers drücken darf! :wall:

sakura 24. Feb 2003 16:17

Das einfachste ist, wenn Du in Deinem Form eine property deklarierst.
Delphi-Quellcode:
type TfFlappErrorDlg = class....
...
  public
    property FlappError: TFlappError read FFlappError write FlappError;
    ...
  end;
Jetzt kannst Du folgendes schreiben
Code:
PROCEDURE TFlappError.ShowErrorDLG(sShort, sLong: STRING); // Dialog zeigen
BEGIN
   WITH fFlappErrorDlg DO
      BEGIN
         TRY
            [color=#f60000]FlappError := Self;[/color]
            ...
            re_simple.Text := sShort; // RichEdit auf Formular
            re_detail.Text := sLong; // RichEdit auf Formular
            Caption := 'ERROR in ' + sFILENAME;  
            Showmodal;
            ...
         FINALLY
            ...
         END;
      END;
END;
Anschliessend kannst Du auf die Eigenschaften der Komponente innerhalb Deines Dialoges ganz normal zugreifen. Wichtig: die Unit für die Komponente muss in der Unit des DialogFensters in der oberen uses-Klausel stehen.

...:cat:...

P.S.
Zitat:

Ups, gleich mein erstes Posting total verhaut..
So schlimm ist es ja auch nicht ;)

APP 24. Feb 2003 16:35

:hello: Vielen Dank, es Funktioniert!

Armin


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