Einzelnen Beitrag anzeigen

fr0g

Registriert seit: 11. Dez 2006
28 Beiträge
 
#6

Re: Aufruf ohne bestimmten Namen

  Alt 6. Feb 2007, 13:38
Ich veröffentliche einfach mal den Quellcode bis jetzt (grob):

Hauptform: FicYou
Delphi-Quellcode:
unit ustart;

interface

uses
  Windows, Messages, ..., mmsystem, Menus, ShellAPI,
  uicmessage, jpeg;

type
  TFicyou = class(TForm)
    ips: TMemo;
    lrechner: TLabel;
...
    bbenutzer: TImage;
    procedure FormCreate(Sender: TObject);
    procedure TCPServerExecute(AThread: TIdPeerThread);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BenutzerlisteDblClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure closeClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure serverstarten;
    procedure serverstoppen;
    procedure formsvorladen;
    { Public-Deklarationen }
  end;

type FormList=record
     MsgBox:TFicMessageBox;
     end;

var
  Ficyou: TFicyou;
  form:array [1..255] of FormList;



implementation

{$R *.dfm}


procedure pause(zeit:LongInt);
VAR anfang:LongInt;
begin
 anfang:=GetTickCount;
 while GetTickCount<anfang+zeit do
 Application.ProcessMessages;
end;


procedure TFicyou.FormCreate(Sender: TObject);
begin
self.BorderIcons:=[biSystemMenu,biMinimize];
TCPServer.Active:=True;
end;

procedure TFicyou.FormActivate(Sender: TObject);
VAR i:integer;
begin
serverstarten;
for i:=0 to 50 do begin
 form[i].MsgBox:=TFicMessageBox.Create(self);
 form[i].MsgBox.Name:='icY'+IntToStr(i);
 form[i].MsgBox.mhistory.Name:='mhistory'+IntToStr(i);

formsvorladen;

SndPlaySound('Sounds/Startup.wav', SND_ASYNC );
end;

procedure TFicyou.TCPServerExecute(AThread: TIdPeerThread);
VAR Eintrag,msg:integer;
    MsgBySvr:String;
begin
   try
    MsgBySvr:=AThread.Connection.ReadLn(#$A,5500); // Clientnachricht lesen
    eabsenderip.Text:=AThread.Connection.Socket.Binding.PeerIP;
    Eintrag:=lbips.Items.IndexOf(eabsenderip.Text);
    if Eintrag>=0 then begin
     Benutzerliste.ItemIndex:=Eintrag;
     MsgBySvr:=Benutzerliste.Items.Strings[Eintrag]+': '+MsgBySvr; end
      else begin
      SndPlaySound('Sounds/Auth.wav', SND_ASYNC);
      msg:=MessageDlg('Sie wurden von einem Benutzer (IP: '+eabsenderip.Text+') angeschrieben. Wollen sie diesen Benutzer zu ihrer Kontaktliste hinzufügen? (Achtung!: Erst nach dem Hinzufügen ist es möglich Nachrichten von Usern zu bekommen d.h. Sie müßten in jetzt anschreiben!)',mtinformation,[mbyes,mbno],0);
       if msg=mryes then begin
        FicUser.leip.Text:=eabsenderip.Text;
        FicUser.Show; eabsenderip.Text:='';
        end;
       if msg=mrno then eabsenderip.Text:='';
      end;
   except
      AThread.Connection.Disconnect;
   end;
evstext.Text:=MsgBySvr;
if (form[Eintrag].MsgBox.Visible=false) then
 begin
 SndPlaySound('Sounds/Message.wav', SND_ASYNC);
 form[Eintrag].MsgBox.Visible:=true;
 end;
pause(221);
eabsenderip.Text:='';
evstext.Text:='';
end;

procedure TFicyou.FormClose(Sender: TObject; var Action: TCloseAction);
begin
serverstoppen;
end;

procedure TFicyou.BenutzerlisteDblClick(Sender: TObject);
begin
form[Benutzerliste.ItemIndex].MsgBox.Visible:=true;
form[Benutzerliste.ItemIndex].MsgBox.Show;
end;

procedure TFicyou.serverstarten;
begin
TcpServer.Active:=false;
TcpServer.Bindings.Clear;
TcpServer.DefaultPort:=StrToIntDef('4466',4466);
   try
      TcpServer.Active:=true;
   except
      raise;
   end;
   if TcpServer.Active then begin
    lstatus.caption:='Verbindung hergestellt';
    lstatus.Font.Color:=clGreen;
   end;
end;

procedure TFicyou.serverstoppen;
begin
try
  TcpServer.Active:=false;
   except
      raise;
   end;
   if not TcpServer.Active then begin
    lstatus.caption:='Verbindung unterbrochen';
    lstatus.Font.Color:=clMaroon;
   end;
end;

procedure TFicYou.formsvorladen;
VAR i:integer;
begin
for i:=0 to Benutzerliste.Items.Count-1 do begin
 form[i].MsgBox.Show;
 form[i].MsgBox.Visible:=false;
 pause(20);
 end;
end;

end.
MessageForm: FicMessageBox
Delphi-Quellcode:
unit uicmessage;

interface

uses
  Windows, ... ,Menus;

type
  TFicmessageBox = class(TForm)
    bsenden: TButton;
    TCPClient: TIdTCPClient;
    IdAntiFreeze2: TIdAntiFreeze;
    Nachrichtsuche: TTimer;
    bsmilie: TButton;
    mhistory: TMemo;
    mmessage: TMemo;
    procedure bsendenClick(Sender: TObject);
    procedure NachrichtsucheTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure mmessageChange(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FicmessageBox: TFicmessageBox;
  senderuser:string;
  lastid:integer;

implementation

uses ustart;

{$R *.dfm}

Function GetWordOfAnsiString(Text : string; WordPos : Word): string;
var
 p : PChar;
begin
  p := PChar(Text);
  repeat
    Dec(WordPos);
    while p^ <> #89 do
    begin
      if WordPos = 0 then
       Result := Result + p^;
      Inc(p);
    end;
    if WordPos = 0 then Exit;
    Inc(p);
  until p^ = #89;
end;

procedure pause(zeit:LongInt);
VAR anfang:LongInt;
begin
 anfang:=GetTickCount;
 while GetTickCount<anfang+zeit do
 Application.ProcessMessages;
end;

procedure TFicmessageBox.bsendenClick(Sender: TObject);
var Msg4Svr:string; // Nachricht für den Server
begin
  FicYou.serverstoppen;
   // Verbindung zum Server herstellen
   TcpClient.Host:=senderuser;
   TcpClient.Port:=StrToIntDef('4466',4466);
   // Versuchen eine Verbindung zum Server herzustellen
   try
      TcpClient.Connect(5000); // max. 5 Sek. um die Verbindung zum Server herzustellen
   except
      MessageDlg(senderuser+' ist offline!',mtError,[mbok],0);
      FicYou.serverstarten;exit;
   end;
   if TcpClient.Connected then begin
      Msg4Svr:=mmessage.Lines.Text;
    TMemo(FindComponent('mhistory'+IntToStr(lastid))).Lines.Add('Du: '+Msg4Svr);
    mmessage.Lines.Text:='';
    // Nachricht zum Server schicken
      TcpClient.WriteLn(Msg4Svr);
    SndPlaySound('Sounds/MsgSent.wav', SND_ASYNC );
      end;
  TCPClient.Disconnect;
  FicYou.serverstarten;
end;

procedure TFicmessageBox.NachrichtsucheTimer(Sender: TObject);
begin
if senderuser<>'then
begin
if(FicYou.evstext.Text<>'')and(FicYou.eabsenderip.Text=senderuser)then
  TMemo(FindComponent('mhistory'+IntToStr(lastid))).Lines.Add(FicYou.evstext.Text)
end;
end;

procedure TFicmessageBox.FormCreate(Sender: TObject);
begin
self.BorderIcons:=[biSystemMenu,biMinimize];
end;


procedure TFicmessageBox.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
mmessage.Text:='';
self.Deactivate;
end;

procedure TFicmessageBox.FormActivate(Sender: TObject);
VAR Owner : HWnd;
begin
Owner:=GetWindow(Handle,GW_OWNER);
ShowWindow(Owner,SW_SHOW);
SetWindowLong(Handle, GWL_ExStyle, WS_Ex_AppWindow);
ShowWindow(Owner,SW_HIDE);

lastid:=StrToInt(GetWordOfAnsiString(self.Name,2));
self.Caption:='< '+FicYou.Benutzerliste.Items.Strings[lastid]+' > - Nachrichtenfenster';
senderuser:=FicYou.lbips.Items.Strings[lastid];

if(FicYou.evstext.Text<>'')and(FicYou.eabsenderip.Text=senderuser)then
  TMemo(FindComponent('mhistory'+IntToStr(lastid))).Lines.Add(FicYou.evstext.Text);
end;

end.
Hoffe das mir jetzt jemand helfen kann!!!
  Mit Zitat antworten Zitat