AGB  ·  Datenschutz  ·  Impressum  







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

Komponente in eigener Unit verwenden

Ein Thema von langer hans · begonnen am 19. Mai 2008 · letzter Beitrag vom 20. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
langer hans

Registriert seit: 8. Mär 2007
Ort: Bad Nauheim
32 Beiträge
 
Delphi 6 Personal
 
#1

Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 09:14
Hallo!!
Habe ein Problem....

Ich will die Komponente TClientSocket in meiner eignenen Unit verwenden. Aber das geht nicht....

Beim Createn des Objekts tritt eine Zugriffsverletzung auf.

Außerdem meckert er immer über ein fehlendes Active Attribut, obwohl es nicht verwendet wird.

Wie kann ich diese Komponete in meiner eigenen Klasse verwenden??

MfG
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 09:16
Zeig mal den Code, der den Fehler verursacht
Markus Kinzler
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 09:21
Hi langer Hans
Hast du die Unit, in der ClientSocket definiert ist, eingebunden?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
langer hans

Registriert seit: 8. Mär 2007
Ort: Bad Nauheim
32 Beiträge
 
Delphi 6 Personal
 
#4

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 09:27
Hier die Klasse die den Fehler verursacht:

Delphi-Quellcode:
unit Upop3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  pop = class(Tobject)
    Client: TClientSocket;
    procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    Status: integer;
    ip:String;
    port:Integer;
    user:String;
    password:String;
    procedure delay(time: integer);
    procedure connect1();
  public
    constructor Create(ip,user,pass:string;port:integer);
    procedure disconnect();
    function getList():String;
    function connect():boolean;
    function getmail(nr:integer):String;
    function delmail(nr:integer):STring;
  end;

var
  Form1: pop;

implementation

{$R *.dfm}

constructor pop.create(ip,user,pass:string;port:integer);
begin
client.Active := false;
self.ip :=ip;
self.user := user;
self.password := pass;
client.Address := ip;
client.Port := port;
self.status := 0;
end;

procedure pop.delay(time: integer);
var time1 : longint;
begin
time1 := gettickcount;
while ((time1+ time )> gettickcount) do
     application.processmessages;
end;


procedure pop.connect1();
begin
 case status of
  0: begin client.Open; end;
  1: begin client.Socket.SendText('USER ' + user + chr(10));end;
  2: begin client.Socket.SendText('PASS ' + password + chr(10)); end;
end;
end;

function pop.connect():boolean;
var check:integer;
begin
check := -2 ;
while ((status > -1) and (status < 3)) do begin
  delay(100);
  if (check <> status) then begin
    check := status;
    connect1();
    delay(100);
    //memo1.lines.add('test');
  end
end;
delay(100);
showmessage(IntToStr(status));
if (status = -1) then result := false else result := true;
//status := 0;
end;

procedure pop.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var bra:string;
begin
bra := socket.ReceiveText;
//showmessage(bra);
if pos(bra,'+')=0 then begin
  //memo1.lines.add(bra);
  inc(status);
end else begin
  //memo1.lines.add(bra );
  status:= -1;
end;
end;

procedure pop.disconnect();
begin
client.Socket.SendText('QUIT ' + chr(10));
end;

function pop.getList():String;
begin
showmessage(IntToStr(status));
if status > 0 then begin
  client.Socket.SendText('LIST ' + chr(10));
  delay(1000);
  result := client.Socket.ReceiveText;
end else
  result := 'nein'
end;

function pop.getmail(nr:integer):String;
begin
if status > 0 then begin
  client.Socket.SendText('RETR ' + IntToStr(nr) + chr(10));
  delay(1000);
  result := client.Socket.ReceiveText;
end else
  result := 'nein'
end;

function pop.delmail(nr:integer):String;
begin
if status > 0 then begin
  client.Socket.SendText('DELE ' + IntToStr(nr) + chr(10));
  delay(1000);
  result := client.Socket.ReceiveText;
end else
  result := 'nein'
end;

{procedure pop.Button1Click(Sender: TObject);

begin
self.ip := '213.165.64.22';
self.user := 'ich@du.de';
self.password := '*********';
port := 110;
client.Address := ip;
client.Port := port;
self.status := 0;
if connect() then memo1.Lines.add('es hat alles geklappt') else memo1.lines.add('Fehler bei der anmeldung');
end;}


{procedure pop.Button2Click(Sender: TObject);
begin
memo1.Lines.add(getmail(2));
end;}


end.
MfG

[edit=SirThornberry]Passwort entfernt - Mfg, SirThornberry[/edit]
[edit=SirThornberry]E-Mailadresse geändert (zwecks weniger spam) - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 09:30
Du musst eine Instanz der TClientSocket-Klasse erzeugen
Es fehlt auch er Aufruf des Konstruktors der Superklasse.
Markus Kinzler
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#6

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 10:26
Ich hoffe das ganze ist nur ein Testemailkonto bei GMX, ansonsten ÄNDERE DEIN KENNWORT.
ÄNDERE DEIN KENNWORT, sonst mache ich es.

Nun zum Problem. Der Client muß wahrscheinlich im Konstruktor erzeugt werden und am Ende im Destruktor zerstört werden.

Delphi-Quellcode:
pop = class(Tobject)
private
  FClient: TClientSocket;
  ...
public
  constructor Create(ip,user,pass:string;port:integer);
  destructor Destroy;
  ...
end;
Delphi-Quellcode:
constructor pop.create(ip,user,pass:string;port:integer);
begin
  FClient:= TClientSocket.Create;
  FClient.Active := false;
  self.ip :=ip;
  self.user := user;
  self.password := pass;
  FClient.Address := ip;
  FClient.Port := port;
  self.status := 0;
end;
Delphi-Quellcode:
destructor pop.destroy;
begin
  FClient.Free;
end;
Dann sollte es mit dem Zugriff funktionieren.

[edit=SirThornberry] Mfg, SirThornberry[/edit]

[edit=SirThornberry]Beiträge zusammengeführt - Mfg, SirThornberry[/edit]
[edit=SirThornberry]Nächsten Beitrag angefügt - nächstes mal bitte die Edit-Funktion verwenden! - Mfg, SirThornberry[/edit]
Matthias
  Mit Zitat antworten Zitat
Alt 19. Mai 2008, 10:26     Erstellt von Brainshock
Dieser Beitrag wurde von gelöscht.
langer hans

Registriert seit: 8. Mär 2007
Ort: Bad Nauheim
32 Beiträge
 
Delphi 6 Personal
 
#7

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 12:36
Zitat:
---------------------------
Fehler
---------------------------
Fehler im Modul : Deklaration der Klasse TClientSocket fehlt oder ist fehlerhaft.
---------------------------
OK Hilfe
---------------------------
Das ist die Fehlermeldung die ich erhalte, auch mit der Erzeugung des Objektes im Konstruktor!
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 12:48
Kannst du den ClientSocket denn in einer normalen Anwendung verwenden oder gibts da den selben Fehler?
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
langer hans

Registriert seit: 8. Mär 2007
Ort: Bad Nauheim
32 Beiträge
 
Delphi 6 Personal
 
#9

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 12:49
Also in einer vorherigen Version des Programms (ohne OOP) hat es problemlos funktioniert...

MfG
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Komponente in eigener Unit verwenden

  Alt 19. Mai 2008, 12:59
Delphi-Quellcode:
constructor pop.create(ip,user,pass:string;port:integer);
begin
  inherited Create;

  FClient:= TClientSocket.Create(Nil);
...
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:24 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