![]() |
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 |
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:... |
Ups, gleich mein erstes Posting total verhaut :oops:
Ich hoffe mein Source ist besser lesbar als mein Text:
Delphi-Quellcode:
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.
--------------------[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; 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: |
Das einfachste ist, wenn Du in Deinem Form eine property deklarierst.
Delphi-Quellcode:
Jetzt kannst Du folgendes schreiben
type TfFlappErrorDlg = class....
... public property FlappError: TFlappError read FFlappError write FlappError; ... end;
Code:
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.
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; ...:cat:... P.S. Zitat:
|
: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