AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi .self oder nicht (aus "SMTP über Strato")
Thema durchsuchen
Ansicht
Themen-Optionen

.self oder nicht (aus "SMTP über Strato")

Ein Thema von H.Bothur · begonnen am 3. Jan 2023 · letzter Beitrag vom 3. Jan 2023
Antwort Antwort
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#1

.self oder nicht (aus "SMTP über Strato")

  Alt 3. Jan 2023, 18:56
Moin,

ich trenne das Thema mal aus meinem SMTP-Thread raus um das ganze nicht zu verwässern:

Zu Post 1.

Wer innerhalb einer Klasse (TMailForm) auf die "vermeintlich" richtige globale Variable (MailForm) zugreift,
der gehört irgendwann mal dafür vollkommen zu Recht bestraft.

-> Weglassen (sowas macht man niemals nicht) oder Self benutzen.
Moin Himitsu,

das sagst Du mir schon seid Jahren - und ich glaube Dir (wirklich) auch, aber ...

Delphi-Quellcode:
procedure Verbinden;
begin
  Form1.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung
  Form1.IdSMTP1.Host := 'smtp.strato.de';
  Form1.IdSMTP1.Port := 465;
  Form1.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587
  usw.
-> Keine Fehlermeldung

Delphi-Quellcode:
procedure Verbinden;
begin
  IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung
  IdSMTP1.Host := 'smtp.strato.de';
  Form1.IdSMTP1.Port := 465;
  Form1.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587
  usw.
-> da werden sofort die ersten beiden als fehlerhaft markiert.
Erste Zeile: E2003 undeklarierter Bezeichner "IdSMTP1" in Zeile 88
Zweite Zeile: E2066 Operater oder Seikolon fehlt in Zeile 89

Delphi-Quellcode:
procedure Verbinden;
begin
  self.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung
  self.IdSMTP1.Host := 'smtp.strato.de';
  Form1.IdSMTP1.Port := 465;
  Form1.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587
  usw.
-> da werden sofort die ersten beiden als fehlerhaft markiert.
erste Zeile: E2003 undeklarierter Bezeichner "self" in Zeile 88
Erste Zeile: E2066 Operater oder Seikolon fehlt in Zeile 89
Zweite Zeile: E2066 Operater oder Seikolon fehlt in Zeile 89

Und jetzt weiß ich nicht woran das liegt ... aber das es eben mit dem "Form1." oder in dem anderen Fall dem "MailForm." davor klappt !
Wenn Du mir aber sagen kannst was ich falsch mache dann lerne ich es endlich ! Und das soll jetzt keine Verar*** sein sondern wirklich der Wille zu verstehen was ich falsch mache.

Gruss
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: .self oder nicht (aus "SMTP über Strato")

  Alt 3. Jan 2023, 19:11
Der Hinweis bezieht sich vermutlich auf das erste Codebeispiel im ersten Beitrag, das so anfängt:

Delphi-Quellcode:
function TMailForm.SendeMail(MailEmpfaenger, CCListe, Betreff, Anhang :string; Body :TStringList; MailAbsender, MailPasswort, MailServer: String; MailPort: Integer) : boolean;
var
**iAttachment : TIdAttachment;
**Erfolg: Boolean;

begin
**(* Connect mit Server *)
**MailForm.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung
**MailForm.IdSMTP1.Host := MailServer;
**MailForm.IdSMTP1.Port := MailPort;

Und das sieht so aus als ob das gemacht wird, was man auf jeden Fall vermeiden sollte. (Zugriff innerhalb der Methode einer Form-Instanz auf die 'globale' Instanz-Variable)


Delphi-Quellcode:
procedure Verbinden;
begin
**Form1.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung
**Form1.IdSMTP1.Host := 'smtp.strato.de';
**Form1.IdSMTP1.Port := 465;
**Form1.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587
**usw.
Das ist anderer Code, eine Methode die nicht zur Form-Klasse gehört. Daher ist es hier richtig und notwendig, irgendwie auf die Form-Instanz zuzugreifen. Es sind zwei verschiedene Fälle.
Michael Justin
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: .self oder nicht (aus "SMTP über Strato")

  Alt 3. Jan 2023, 19:38
Der Hinweis bezieht sich vermutlich auf das erste Codebeispiel im ersten Beitrag, das so anfängt:

[...]

Und das sieht so aus als ob das gemacht wird, was man auf jeden Fall vermeiden sollte. (Zugriff innerhalb der Methode einer Form-Instanz auf die 'globale' Instanz-Variable)

[...]

Das ist anderer Code, eine Methode die nicht zur Form-Klasse gehört. Daher ist es hier richtig und notwendig, irgendwie auf die Form-Instanz zuzugreifen. Es sind zwei verschiedene Fälle.
Ahh ... JETZT habe ich es endlich begriffen .... der eine, "schlechte" Code kommt aus einem Projekt mit mehreren Units und da ist SendeMaiil als public deklariert. Das andere ist ein Testprogramm das keine Units hat.

DANKE - ich glaube jetzt habe ich es verstanden !!

Schönen Abend
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: .self oder nicht (aus "SMTP über Strato")

  Alt 3. Jan 2023, 20:28
Problem ist, dass du ja schon in der Klasse drin bist.
Dort hast du Self explizit oder implizit (wenn man es nicht angibt), um auf die aktuelle Instanz zuzugreifen.

In der globalen Variable muß aber nicht die Instanz drin stehen, in welcher du gerade drin bist.
* z.B. wenn man mehrere Instanzen der Klasse hat

* Oder wenn während des Erstellens und Freigebens die Variable (noch) nicht auf diese Instanz zeigt.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 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