Autor Beitrag
himmelweiss
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 20.09.04 12:06 
Ich benutze TIDimap4 Object bzw. Override diese um mein eigenen E-Mail Client zu erstellen.

Ich komme soweit klar meine eigenen Methoden usw. zu schreiben für mein Eigenes E-Mail-Client-Komponentchen.
Aber bin wirklich voll am rätseln wie ich ".messages" (was die gesamtanzahl der Messages der ausgewälten Mailbox ausgibt) hinter ".Mailbox" bringen kann (also die .Mailbox procedur mit .messages function verschachteln)...

Kann doch nicht sein das des so kompliziert ist um sowas wie das hier hinzukriegen ?

ausblenden Delphi-Quelltext
1:
MeinEmailclient.Mailbox['INBOX'].Messages //gibt die anzahl der nachrichten im "Posteingang" aus					


aber wie gesagt, hab probleme das so hinzukriegen... ich kanns getrennt machen ja, aber hab eigentlich vor eben das alles zu verschachteln das man am schluss ganz leicht mit nur paar zeilen code nen Email/Client schreiben kann.


Hier mal der gesammte Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
unit WOEMailClient;

interface

uses
  SysUtils, Classes, IdIMAP4, dialogs;

type
  TWOEMailClient = class(TComponent)
  private
    vIdIMAP4: TIdIMAP4;
    vUsername: String;
    vPassword: String;
    vServerIP: String;
    vPort: Integer;
    vOnConnected: TNotifyEvent;
    vOnDisconnected: TNotifyEvent;
    { Private declarations }
  protected
    { Protected declarations }
  public
    procedure Connect;
    procedure Disconnect;
    function Connected: Boolean;
    procedure MailBox(ChooseMailBox: String);
    function Messagecount: LongInt;
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;
    { Public declarations }
  published
    property Username: string read vUsername write vUsername;
    property Password: string read vPassword write vPassword;
    property ServerIP: string read vServerIP write vServerIP;
    property Port: Integer read vPort write vPort default 143;
    property OnConnected: TNotifyEvent read vOnConnected write vOnConnected;
    property OnDisconnected: TNotifyEvent read vOnDisconnected write vOnDisconnected;
    { Published declarations }
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('War Office (new)', [TWOEMailClient]);
end;

constructor TWOEMailClient.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  vIdIMAP4:= TIdIMAP4.Create(nil);
  vPort:= 143;
end;

destructor TWOEMailClient.Destroy;
begin
  if vIdIMAP4.Connected then
    vIdIMAP4.Disconnect;
  inherited Destroy;
end;

procedure TWOEMailClient.Connect;
begin
  vidimap4.Port := vport;
  vidimap4.Username := vusername;
  vidimap4.Password := vpassword;
  vidimap4.Host := vServerIP;
  vidimap4.Connect;
end;

function TWOEMailClient.Connected: Boolean;
begin
  result:= vidimap4.Connected;
end;

procedure TWOEMailClient.Disconnect;
begin
  if vidimap4.Connected then
    begin
      vidimap4.Disconnect;
      showmessage('Verbindung abgebrochen'); //for testing
    end;
end;

procedure TWOEMailClient.Mailbox(ChooseMailBox: String);
begin //Select a Mailbox
    vidimap4.SelectMailBox(ChooseMailBox);
end;

function TWOEMailClient.Messagecount: LongInt;
begin //Count Messages in current box
  result := vidimap4.MailBox.TotalMsgs;
end;


end.


Moderiert von user profile iconKlabautermann: Code durch Delphi-Tags ersetzt.
himmelweiss Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 21.09.04 07:58 
Titel: ......
hmm, hat noch nie einer ne Komponente geschrieben ? glaub ich ja nicht :o
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 21.09.04 08:03 
Ich würde das über ein TList oder ein dynamisches Array probieren.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 21.09.04 08:14 
Titel: Re: ......
himmelweiss hat folgendes geschrieben:
hmm, hat noch nie einer ne Komponente geschrieben ? glaub ich ja nicht :o
Schiebepostings sind in diesem Forum nicht sehr beliebt!

zu Deinem Problem: Zuerst einmal muss Du natürlich eine property mit Namen "Mailbox" haben. Falls ich mich nicht verguckt habe, gibt es die bei Dir noch nicht. Wie das geht (insb. die Sache mit "['INBOX']") verrät Dir die Delphi-Hilfe, das ist da IMHO ziemlicg gut demonstriert.

Und die einzige Möglichkeit, eine solche Verschachtelung zu erreichen, die mir bekannt ist, ist, dass Mailbox['INBOX'] ebenfalls eine Klasse ist, eben mit der Property Messages.

Als groben Umriss kannst Du Dir das so vorstellen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
type
  TMailbox = class(TObject) //oder sonstwas
  private
    {...}
    function GetMessages : Integer;
  public
    property messages : Integer read GetMessages;
  end;

type
  TWOEMailClient = class(TComponent)
  private
    inbox : TMailbox;
    outbox : TMailbox;
    {...}
    function GetMailbox(const index : String): TMailBox;
  public
    property mailbox[index : String] : TMailbox read GetMailbox;
  end;

{...}
implementation
{...}
procedure TMailbox.GetMessages : Integer;
begin
  result := 42;
end;

procedure TWOEMailClient.GetMailbox(const index : String) : TMailbox;
begin
  result := inbox; //Default setzen, falls index Unsinn ist
  if index = 'INBOX' then result := inbox;
  if index = 'OUTBOX' then result := outbox;
end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
himmelweiss Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 21.09.04 13:21 
Titel: ...
Danke es funktioniert ! Du hast mir sehr geholfen.... ist doch etwas komplizierter als ich dachte, von allein wäre ich da lange nicht drauf gekommen wie man sowas lösen könnte.

Vielen Dank.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 21.09.04 13:26 
Hallo!

Schön, dass ich helfen konnte. Wenn die Frage beantwortet ist, dann markiere den Thread doch als erledigt! :-) Einfach in Deinem ersten Beitrag auf den grünen Haken klicken.

MfG
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".