Niebardzo się da. Trzeba by program przerobić. Można używać komponentów w konsoli ich zdarzen także, ale
na przykład zrobiłem przed chwilą taki test. Poniższy kod się kompiluje i pokazuje tekst z Edita, ale już Timer,
ktory losuje liczbę i podstawia ją do zmiennej nie działa bo nie było Application.Run i konsola pokazuje ciągle zero - także musiał byś przerobić swój program tak aby tworzyć komponenty niewizualne bez Ownera czyli im
podać nil jako parametr, jeżeli potrzebują Ownera. Czasami też trzeba wcześniej użyć funkcji CoInitialize(nil);
program Project1;
{$APPTYPE cONSOLE}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm := False;
Writeln(Form1.Edit1.Text);
Write('Jestes w konsoli - napisz cos: ');
Readln;
repeat
Writeln(Form1.JakasZmienna);
until Form1.JakasZmienna > 100000;
end.
Można na przykład zrobić coś takiego. Kod projektu:
program Project1;
{$APPTYPE CONSOLE}
uses
pingowanie;
begin
if CzyJestPolaczenieInternetowe = True then
begin
Writeln('Masz polaczenie z Internetem.');
end
else
begin
Writeln('Nie wykryto polaczenia z internetem, pingujac po iP adres: ',
AdresDoPingowania);
end;
Readln;
end.
Kod modułu pingowanie, który wykorzystuje moduł dping który można znaleźć w tym artykule pod adresem:
http://4programmers.net/Delphi/Gotowce/Dwa_w_jednym_czyli_jak_napisać_komponent_i_wysłać_pinga?sid=f9835f9d9f3c76d499fae3535d6229e8
Jak widzisz moduł pingowanie wykorzystuje niepubliczną klasę TPinger i obsługuje również zdarzenie, bo tego
wymaga w swej konstrukcji moduł dping. Zastosowałem to rozwiązanie wprawdzie w kilku swoich programach
okienkowych, ale jak sam możesz sprawdzić - działa to również pod aplikacją konsolową. Tylko exe "puchnie".
unit pingowanie;
interface
uses
Classes, Forms, dping;
const
AdresDoPingowania = 'www.wp.pl';
function CzyJestPolaczenieInternetowe : boolean;
implementation
type
TPinger = class(TObject)
private
CzyJestInterNet : boolean;
procedure PingerOdpowiedzi(Sender : TObject; ReplyStatus : TReplyStatus; ReplyTime : Integer);
public
constructor Create(var Rezultat : boolean);
end;
procedure TPinger.PingerOdpowiedzi(Sender : TObject; ReplyStatus : TReplyStatus;
ReplyTime : Integer);
begin
CzyJestInterNet := ReplyStatus = rsLives;
end;
constructor TPinger.Create(var Rezultat : boolean);
const
IleRazyMapingowac = 3;
Ping_Limit_Czasu_MS = 500;
Pinguj_Adres_IP = '212.77.100.101';
var
I : Byte;
Pinger : TDPing;
begin
Rezultat := False;
CzyJestInterNet := False;
Pinger := TDPing.Create(Application);
Pinger.TimeOut := Ping_Limit_Czasu_MS;
Pinger.OnReply := PingerOdpowiedzi;
Pinger.Host := Pinguj_Adres_IP;
for I := 1 to IleRazyMapingowac do
begin
try
Pinger.Ping;
except
CzyJestInterNet := False;
end;
if CzyJestInterNet = True then
begin
Break;
end;
end;
Rezultat := CzyJestInterNet;
end;
function CzyJestPolaczenieInternetowe : boolean;
var
Pinger : TPinger;
JestInterNet : boolean;
begin
JestInterNet := False;
Pinger := TPinger.Create(JestInterNet);
Result := JestInterNet;
Pinger.Free;
end;
end.