AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

COM - For-Each in Delphi, aber wie?

Ein Thema von DelphiPeter · begonnen am 26. Jun 2008 · letzter Beitrag vom 13. Aug 2008
Antwort Antwort
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#1

COM - For-Each in Delphi, aber wie?

  Alt 26. Jun 2008, 06:49
Hallo zusammen!

Habe da mal eine Frage, und zwar habe ich hier eine VB Quelle...

Delphi-Quellcode:
.
Dim oRecipients As DvApi32.Addresses
Dim oRecipient As DvApi32.Address
.
.
.
 If Not oItem.Recipients.Count = 0 Then
    Set oRecipients = oItem.Recipients
    For Each oRecipient In oRecipients
      strTo = strTo & "To: " & oRecipient.EMail & ";" & CrLf
    Next
  End If
.
.
.
Soweit konnte ich das übersetzen...
Delphi-Quellcode:
var
  oRecipients: Addresses;
  oRecipient: Address;
begin
  {...}
  if oMailItem.Recipients.Count > 0 then begin
     oRecipients := oMailItem.Recipients;
     // Ab hier hänge ich
     for oRecipient in oRecipients do
     begin
         // irgendwas tun
         Next;
     end;
  end;
  {...}
Leider funktioniert das ganze aber nicht. For-Each gibt es ja in Delphi nicht.

Bekomme immer diese Meldung

Zitat:
[DCC Fehler] MyUnit.pas(487): E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'Addresses', weil 'Addresses' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegirffen werden kann
[DCC Fehler] MyUnit.pas(490): E2003 Undefinierter Bezeichner: 'Next'
Kann mir da mal jemand helfen?
Das wäre wirklich super von euch!


Danke,

Peter
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.766 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: COM - For-Each in Delphi, aber wie?

  Alt 26. Jun 2008, 07:02
Also ich kann zunächst nur zweierlei sagen:
1. Delphi 2007 hat sehr wohl eine for each Implementierung (nennt sich: for in), und die nutzt Du ja auch
2. next gibt es in Delphi nicht, dafür gibt es begin...end, kannst Du also ersatzlos streichen.

Naja, und dann scheint der Typ Adresses nicht hinreichend bekannt zu sein, um ein for in zu unterstützen. Mit ein paar Klimmzügen schaffst Du es aber vielleicht trotzdem, nachdem Du hier reingeschaut hast: http://delphi.about.com/cs/adptips20...ltip0404_3.htm

Sherlock
Oliver
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#3

Re: COM - For-Each in Delphi, aber wie?

  Alt 26. Jun 2008, 07:41
Hallo Sherlock,

danke für den Hinweis, ich weiß leider nicht wie ich GetEnumerator anwenden soll um Addresses bekannt zu machen. Da fehlt mir scheinbar noch ein wenig Erfahrung.

Kannst du mir nochmal bitte helfen?

Vielen vielen Dank!

Peter
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.766 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: COM - For-Each in Delphi, aber wie?

  Alt 26. Jun 2008, 10:04
Da kann ich leider nicht weiter helfen. Versuch halt herauszubekommen, wie Adresses definiert ist. Eventuell gibts eine Items-Liste, oder sowas?

Sherlock
Oliver
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#5

Re: COM - For-Each in Delphi, aber wie?

  Alt 1. Aug 2008, 09:24
Hallo Zusammen!

Wie sieht es denn aus, kann mich jemand aus meiner Misere holen? Komme einfach nicht weiter



Peter
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.548 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: COM - For-Each in Delphi, aber wie?

  Alt 1. Aug 2008, 09:32
Es scheint sich ja um ein Array oder eine TList o.ä. zu handeln. Könnte man nicht einfach mit einer "ganz normalen" For-Schleife durchgehen?
Delphi-Quellcode:
var
  oRecipients: Addresses;
  oRecipient: Address;
  i: integer;
begin
  {...}
  if oMailItem.Recipients.Count > 0 then begin
     oRecipients := oMailItem.Recipients;
     for i := 0 to Pred(oRecipients.Count) do
     begin
       oRecipient := oRecipients[i] as Address;
       //irgendwas machen
     end;
  end;
  {...}
Allerdings übernehme ich keine Haftung , einfach mal ausprobieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.617 Beiträge
 
#7

Re: COM - For-Each in Delphi, aber wie?

  Alt 1. Aug 2008, 09:36
Och menno. Du magst nicht wirklich hier nach Com und Enumerator suchen, oder?

Unser Sakura hat irgendwo hier unter diesen Stichworten in der DP einen Link versteckt, wo er auf seine ComEnumerator Unit verweist.

Einen kurzen Artikel darüber (mit Link zu CodeCentral wo's die Unit gibt) findest Du hier:
http://www.delphi3000.com/articles/article_4209.asp?SK=
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: COM - For-Each in Delphi, aber wie?

  Alt 1. Aug 2008, 09:37
Hallo,

ich ahne, was Dein Problem ist, weiß aber keine Lösung.

Eventuell hilft Dir der Auszug aus einem Quelltext von einem meiner Programme:
Delphi-Quellcode:
      wmiObjectSet := wmiServices.InstancesOf(sClass, wbemFlagReturnImmediately or wbemQueryFlagShallow, nil);
      Enum := (wmiObjectSet._NewEnum) as IEnumVariant;
      bOk := False;
      while (Enum.Next(1, ovVar, lwValue) = S_OK) do begin
        bOk := True;
        wmiObject := IUnknown(ovVar) as SWBemObject;
        propSet := wmiObject.Properties_;
        propEnum := (propSet._NewEnum) as IEnumVariant;

        while (propEnum.Next(1, ovVar, lwValue) = S_OK) do begin
          wmiProp := IUnknown(ovVar) as SWBemProperty;
          sValue := '';
          if VarIsNull(wmiProp.Get_Value) then sValue := 'Is Nullelse
          case wmiProp.CIMType of
            wbemCimtypeSint8,
            wbemCimtypeUint8,
            wbemCimtypeSint16,
            wbemCimtypeUint16,
            wbemCimtypeSint32,
            wbemCimtypeUint32,
            wbemCimtypeSint64:
              if VarIsArray(wmiProp.Get_Value) then begin
                if VarArrayHighBound(wmiProp.Get_Value, 1) > 0 then begin
                  for Count := 1 to VarArrayHighBound(wmiProp.Get_Value, 1) do begin
                    sValue := sValue + ' ' + IntToStr(wmiProp.Get_Value[Count]);
                  end;
                end;
              end else sValue := IntToStr(wmiProp.Get_Value);

            wbemCimtypeReal32,
            wbemCimtypeReal64: sValue := FloatToStr(wmiProp.Get_Value);

            wbemCimtypeBoolean: if wmiProp.Get_Value then sValue := 'Trueelse sValue := 'False';

            wbemCimtypeString,
            wbemCimtypeUint64:
              if VarIsArray(wmiProp.Get_Value) then begin
                if VarArrayHighBound(wmiProp.Get_Value, 1) > 0 then begin
                  for Count := 1 to VarArrayHighBound(wmiProp.Get_Value, 1) do begin
                    sValue := sValue + ' ' + wmiProp.Get_Value[Count];
                  end;
                end;
              end else begin
                sValue := wmiProp.Get_Value;
              end;
            wbemCimtypeDatetime:
              sValue := wmiProp.Get_Value;
          else
            begin
              Try
                sValue := wmiProp.Get_Value;
              Except
                on e : Exception Do Begin
                  sValue := 'Wert kann nicht gelesen werden: ' + e.Message;
                end;
              End;
            end;
          end;
          sl.Add(wmiProp.Name + '=' + sValue);
        End;
Mit diesem Teil habe ich jedoch ein Problem, da ist irgendwo ein Speicherloch drin, dass ich nicht finde.
Läuft das Programm lange genug, ist irgendwann der Speicher voll.

Stephan
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#9

Re: COM - For-Each in Delphi, aber wie?

  Alt 13. Aug 2008, 07:09
Hallo Leute!

Letztlich hat der Vorschlag von DeddyH geholfen.
ich möchte mich bei allen für die tolle Hilfe bedanken.


DANKE

Peter
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.548 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: COM - For-Each in Delphi, aber wie?

  Alt 13. Aug 2008, 07:15
Das hätte ich nun gerade nicht erwartet . Aber wenn es funktioniert, umso besser.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 14:33 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