Toon posts:

[Delphi/Indy] create Indy component at runtime

Pagina: 1
Acties:
  • 123 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik wil een Delphi applicatie maken ZONDER form, maar met gebruik van Indy componenten. Nu heb ik de volgende code:

Delphi:
1
2
3
4
5
6
7
8
9
10
var
  UDPServer: TIdUDPServer;
  function WillekeurigeFunc(): integer;

implementation

function WillekeurigeFunc(): integer;
begin
  UDPServer := TIdUDPServer.Create(nil);
end;

Ik krijg alleen iedere keer wanneer ik de functie WillekeurigeFunc() aanroep de melding: 'cannot assign a nil to a TSocketHandles'. Hoe moet ik dit component dan creeëren?? 'Self' werkt ook niet, en ik heb dus geen Form om 'm aan te hangen.

Ik heb al enige tijd ge-Googled, maar niets gevonden..

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Als ik bij Google op hit 1 kijk zie ik daar toch echt maar 1 overload van de Create voor TIdUDPServer, en dat is met een TComponent als Owner.

En bij gebrek aan Forms kun je altijd nog de root-Component namelijk de globale TApplication instance 'Application' gebruiken :)

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 27 januari 2004 @ 17:21:
Als ik bij Google op hit 1 kijk zie ik daar toch echt maar 1 overload van de Create voor TIdUDPServer, en dat is met een TComponent als Owner.
Ja, die eerste hit is gewoon de source van het component, maar helaas ben ik niet ervaren Delphi programmeur genoeg om daar enige informatie uit te halen.
En bij gebrek aan Forms kun je altijd nog de root-Component namelijk de globale TApplication instance 'Application' gebruiken :)
Als ik gebruik maak van Application krijg ik de melding: Undeclared identifier: 'Application'. Mis ik iets in me uses clause?

Verwijderd

Topicstarter
Verwijderd schreef op 27 januari 2004 @ 17:30:
Als ik gebruik maak van Application krijg ik de melding: Undeclared identifier: 'Application'. Mis ik iets in me uses clause?
Ok, inderdaad ik miste 'Forms' in me uses clause, maar dat maakte nog niets uit, zodra ik gebruik maakte van Application kreeg ik weer de melding dat ik geen nil kan assignen. ('cannot assign a nil to a TSocketHandles').

[ Voor 9% gewijzigd door Verwijderd op 27-01-2004 17:37 ]


Verwijderd

wordt de application variabele normaal niet bij het maken van de mainform geinitialiseerd?
Als dit zo is moet je het nu (zonder mainform) zelf doen bij het opstarten van jou prog.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Application wordt geinitialiseerd in de Project Source (zeg maar de main-functie).

Bij gebrek aan Application kun je er gewoon zelf een initialiseren.

Professionele website nodig?


Verwijderd

Topicstarter
Verwijderd schreef op 27 januari 2004 @ 17:42:
wordt de application variabele normaal niet bij het maken van de mainform geinitialiseerd?
Als dit zo is moet je het nu (zonder mainform) zelf doen bij het opstarten van jou prog.
Maar ik heb geen form :)

Maar goed, application komt nu bekend voor, werd wel geinitaliseert in de project source, maar zonder forms in de uses deed die het sowiezo niet.
Maar ik krijg nog steeds de melding: 'cannot assign a nil to a TSocketHandles' Dus ook als ik gebruik maak van create(application).

Moet een Indy component aan een form hangen ofzo??

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Project2;

{$APPTYPE CONSOLE}

uses idUDPServer, Windows;

var
  UDPServer: TIdUDPServer;

function WillekeurigeFunc: integer;
begin
  UDPServer := TIdUDPServer.create(nil)
end;

begin
  WillekeurigeFunc;
  MessageBox(0, Pchar(string(UDPServer.ClassName)), '', 0);
  UDPServer.Free;
end.


Werkt perfect :)

edit: in delphi 6 met Indy 8...

[ Voor 7% gewijzigd door Delpix op 27-01-2004 18:16 ]

...beter bekend als AMFan


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Idd kan je ipv een Owner mee te geven ook gewoon nil meegeven. Niet vergeten dan ook weer zelf het object vrij te geven met Free.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ok, ik ben eruit. Het was een lichtelijk stomme fout. Inderdaad, je kan gewoon Indy componenten met nil als owner maken. Ik had jullie een vereenvoudigd stukje van me code gestuurt. Daar had ik niet dit bij gedaan:

Delphi:
1
2
3
4
5
6
7
with UDPServer do
begin
  OnUDPRead := EventHandler.IdUDPServerUDPRead;
  DefaultPort := Port;
  Active := False;
  Bindings := nil;
end;

De handige (en minder handige waarschijnlijk ook) Delphi coder ziet het vast al, ik had Bindings nil gemaakt en dat mocht juist niet, dat was ook de melding die ik kreeg (L-E-Z-E-N!!). Het ging dus helemaal niet over de TIdUDPServer Create method. STOM! |:( Sorry! Wel bedankt allemaal voor de hulp!!
Pagina: 1