AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein in der Laufzeit erstellte Komponenten und ihre Funktionen
Thema durchsuchen
Ansicht
Themen-Optionen

in der Laufzeit erstellte Komponenten und ihre Funktionen

Ein Thema von BAMatze · begonnen am 24. Aug 2008 · letzter Beitrag vom 27. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

in der Laufzeit erstellte Komponenten und ihre Funktionen

  Alt 24. Aug 2008, 10:12
Hallo an alle,

Ich hab eine Frage. Ich habe mir Turbo Delphi geladen und wie wahrscheinlich die meisten wissen, gibt es dort Einschränkungen für Komponenten von Dritten (unteranderem Indy). Ich möchte für die Arbeit ein Programm zur Steuerung einer Maschine schreiben. Die Maschine steht aus Sicherheitsgründen in einem seperaten Raum. Deswegen soll über einem 2. Rechner und TServerSocket/ TServerClient das Programm an der Maschine gesteuert werden.

Nun das Problem:

Wie initialisiere ich bei einem TServerSocket die OnClientRead-Funktion, so dass ich sie benutzen kann. Klingt zwar trivial aber bisher hatte ich immer eine Delphi Version, wo Indy direkt eingebunden war und somit über den Objektinspektor angesprochen werden konnte.

Würde mich über eure Hilfe freuen, auch wenn das eine wahrscheinlich eher triviale Frage ist.

Danke

BAMatze
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 10:20
Im Prinzip ganz einfach: Du definierst Dir eine Methode mit gleicher Signatur und kannst diese dann dem Event zuweisen. Es muss aber eine Methode sein, eine reguläre Funktion geht nicht. Ein Beispiel für einen Button:
Delphi-Quellcode:
type TMyForm = class(TForm)
private
  procedure DoOnClick(Sender: TObject);
...
end;

...

procedure TMyForm.DoOnClick(Sender: TObject);
begin
  //hier der Code der Methode
end;

...
MyButton := TButton.Create(self);
...
MyButton.OnClick := DoOnClick;
...
end.
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
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 10:41
Danke für deine Hilfe,

Habe jetzt folgendes Programm dazu geschrieben und es kommt zumindest beim compilieren zu keinem Fehler. Kannst ja mal schauen, ob ich einen logischen Fehler (wie z.B. Unendlich Schleife)eingebaut hab, der durch den Compiler nicht erkannt wird.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  myServer : TServerSocket;

implementation

{$R *.dfm}

procedure TForm1.OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i : integer;
begin
  For i := 0 to myServer.Socket.ActiveConnections - 1 do
    begin
      with myServer.Socket.Connections [i] do
      if (Connected) then SendText('Hallo');
    end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  myServer := TServerSocket.Create(Form1);
  myServer.Port := 6712;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  myServer.Destroy;
end;

end.

Danke nochmal
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 10:44
Du solltest das OnClientRead auch noch zuweisen (am besten mit im OnCreate)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 10:44
Auf die Schnelle fallen mir 2 Dinge auf:
- statt Destroy besser Free aufrufen
- Du hast die Methode noch nicht zugewiesen
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
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 10:52
Die beiden letzten Proceduren habe ich so abgeändert:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  myServer := TServerSocket.Create(Form1);
  myServer.Port := 6712;
  myServer.OnClientRead := Form1.OnClientRead;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  myServer.free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 10:58
Kleiner Verbesserungsvorschlag:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  myServer := TServerSocket.Create(Form1);
  myServer.Port := 6712;
  myServer.OnClientRead := self.OnClientRead;
end;
Man sollte niemals benannte Instanzen nehmen.
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
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 11:03
Danke hab ich noch verädert.

Eine kleine Zusatzfrage, wie kann ich in dem Memo die Cursorposition (der blinkende senkrechte Strich im Textfeld) ausschalten ohne gleich das ganze Memo-Feld zu deaktivieren oder kann ich die Schriftfarbe des deaktivierten Memofeldes von grau auf schwarz ändern?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 11:15
Für den Cursor müsste HideCaret() weiterhelfen.
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 SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: in der Laufzeit erstellte Komponenten und ihre Funktione

  Alt 24. Aug 2008, 11:53
Zitat von DeddyH:
Kleiner Verbesserungsvorschlag:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  myServer := TServerSocket.Create(Form1);
  myServer.Port := 6712;
  myServer.OnClientRead := self.OnClientRead;
end;
Man sollte niemals benannte Instanzen nehmen.
Nicht ganz konsequent Schau dir mal den Parameter von TServerSocket.Create an.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 03:59 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