Avatar billede bratkid Nybegynder
01. maj 2001 - 00:17 Der er 10 kommentarer og
1 løsning

blink blink

Jeg har lavet denne simple chat..problemet er, at hvis jeg minimere chatten, så begynder den ikke, at blinke, som i ICQ.

her er sourcen:

unit Unit_Main;

interface

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

type
  TForm_Main = class(TForm)
    pcLIFCL: TPageControl;
    tsClient: TTabSheet;
    gbBasicClientSettings: TGroupBox;
    btnClientClose: TButton;
    btnClientOpen: TButton;
    UserID: TGroupBox;
    Username: TEdit;
    lstClientActivity: TListBox;
    btnClearClientSocketLog: TButton;
    tsTextChat: TTabSheet;
    memReceive: TMemo;
    memSend: TMemo;
    btnSend: TButton;
    ClientSocket1: TClientSocket;
    rbtnConnectionAddress: TRadioButton;
    edConnectionAddress: TEdit;
    rbtnConnectionHost: TRadioButton;
    edConnectionHost: TEdit;
    edConnectionPort: TEdit;
    LblPort: TLabel;
    procedure btnClientOpenClick(Sender: TObject);
    procedure btnClientCloseClick(Sender: TObject);
    procedure ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);

    procedure btnClearClientSocketLogClick(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Lookup(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure btnSendClick(Sender: TObject);
    procedure memSendKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure memReceiveChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_Main: TForm_Main;

implementation

{$R *.DFM}

procedure TForm_Main.FormCreate(Sender: TObject);
begin
btnClientClose.Enabled := False;
btnSend.Enabled := False;
end;

// Client Socket Procedures and Functions

procedure TForm_Main.btnClientOpenClick(Sender: TObject);
begin
  //Set Connection Port or Service
    if edConnectionPort.Text = \'\' then
    messagebox(0, \'You must have a port to connect to\', \'Error\',32)
    else ClientSocket1.Port := StrToInt(edConnectionPort.Text);

  //Set Connection Address or Host
  if (rbtnConnectionAddress.Checked) then
    ClientSocket1.Address := edConnectionAddress.Text
  else if (rbtnConnectionHost.Checked) then
    ClientSocket1.Host := edConnectionHost.Text;

  lstClientActivity.Items.Add(\'Client: Opening...\');
  ClientSocket1.Open;
  lstClientActivity.Items.Add(\'Client: Open\');

  lstClientActivity.Items.Add(\'Local Host: \' + ClientSocket1.Socket.LocalHost);
  lstClientActivity.Items.Add(\'Local Address: \' + ClientSocket1.Socket.LocalAddress);
  lstClientActivity.Items.Add(\'Local Port: \' + IntToStr(ClientSocket1.Socket.LocalPort));
end;

procedure TForm_Main.btnClientCloseClick(Sender: TObject);
begin
  lstClientActivity.Items.Add(\'Client: Closing...\');
  ClientSocket1.Close;
  lstClientActivity.Items.Add(\'Client: Closed\');
end;

procedure TForm_Main.ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Connecting...\');
end;

procedure TForm_Main.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
btnClientClose.Enabled := True;
btnSend.Enabled := True;
btnClientOpen.Enabled := False;
Username.Enabled := False;
  lstClientActivity.Items.Add(\'Client: Connected\');
//ClientSocket1.Socket.SendText(\'NICK\' + char(10));
end;

procedure TForm_Main.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
lstClientActivity.Items.Add(\'Client: Disconnecting...\');
btnClientClose.Enabled := False;
btnSend.Enabled := False;
btnClientOpen.Enabled := True;
Username.Enabled := True;
memReceive.Text := memReceive.Text + Char(13) + char(10) + \'* Disconnected.\';
lstClientActivity.Items.Add(\'Client: Disconnected\');
end;

procedure TForm_Main.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  lstClientActivity.Items.Add(\'Client: Error\');
end;

procedure TForm_Main.ClientSocket1Lookup(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Lookup\');
end;

procedure TForm_Main.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Read\');
  memReceive.Text := memReceive.Text + char(13) + char(10) + Socket.ReceiveText;
end;

procedure TForm_Main.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Write\');
end;

//Other


procedure TForm_Main.btnClearClientSocketLogClick(Sender: TObject);
begin
  lstClientActivity.Items.Clear;
end;

procedure TForm_Main.btnSendClick(Sender: TObject);
begin
if Not (memSend.GetTextLen <= 0) then
if (ClientSocket1.Active) then
begin
    ClientSocket1.Socket.SendText(Username.Text + \': \' + memSend.Text);
    memSend.Text := \'\';
end
end;

procedure TForm_Main.memSendKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = 13 Then btnSend.Click;
end;

procedure TForm_Main.memReceiveChange(Sender: TObject);
begin
  memReceive.SelStart := Length(memReceive.Text);
  memReceive.Perform(EM_SCROLLCARET, 0, 0);
end;

end.
Avatar billede makse Nybegynder
01. maj 2001 - 00:40 #1
www.borrisholt.com - Shell API ligger der et eksempel på Animated Tray Icons.
Måske du kan bruge det til noget.
Avatar billede nico26 Nybegynder
01. maj 2001 - 00:41 #2
Prøv denne kode i en timers OnTimer event

FlashWindow(Application.Handle, True);
Avatar billede bratkid Nybegynder
01. maj 2001 - 00:44 #3
prøver lige nicos forslag
Avatar billede bratkid Nybegynder
01. maj 2001 - 00:47 #4
okay....den blinkede hele tiden...også når den ikke var minimeret
Avatar billede bratkid Nybegynder
01. maj 2001 - 00:49 #5
jeg satte timer componented på formen og skrev:
ontimer:

FlashWindow(Application.Handle, True);
Avatar billede nico26 Nybegynder
01. maj 2001 - 02:28 #6
du skal selvfølgelig aktivere timeren når formen er minimeret og deaktivere den når den ikke er.

tilføj en eventhandler til Application.OnActivate:

type
  TForm_Main = class(TForm)
  ...
  private
    procedure AppActivate(Sender: TObject);
  ...

implementation

procedure TForm_Main.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
  Application.OnActivate := AppActivate;
end;

i formens onCreate disabler du timeren, og forbinder ovenstående procedure med Application.OnActivate:

procedure TForm_Main.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
  Application.OnActivate := AppActivate;
end;

i de eventhandlers der skal få formen til at blinke skal du tilføje:

procedure TForm_Main.EtEllerAndet(Sender...
begin
  //din code
  if WindowState = wsMinimized then
    Timer1.Enabled := True;
end;
Avatar billede borrisholt Novice
01. maj 2001 - 06:46 #7
Hvis det er nede i taskbaren så lav en timer og skriv det følgende kode i et ontimer event :

  FlashWindow(Application.Handle, true);


iøvrigt så skal din procedure se således ud :

procedure TForm_Main.EtEllerAndet(Sender...
begin
  //din code
  Timer1.Enabled := WindowState = wsMinimized;
end;

Jens b (http://fotx.net/borrisholt)
Avatar billede bratkid Nybegynder
01. maj 2001 - 16:30 #8
http://62.243.18.141/Client.zip

kan i ikke bare rette den..jeg prøvede jeres kode, men der var en lille fejl tror jeg
Avatar billede nico26 Nybegynder
02. maj 2001 - 02:34 #9
unit Unit_Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ScktComp, Grids, ComCtrls, StdCtrls, ExtCtrls;

type
  TForm_Main = class(TForm)
    pcLIFCL: TPageControl;
    tsClient: TTabSheet;
    gbBasicClientSettings: TGroupBox;
    btnClientClose: TButton;
    btnClientOpen: TButton;
    UserID: TGroupBox;
    Username: TEdit;
    lstClientActivity: TListBox;
    btnClearClientSocketLog: TButton;
    tsTextChat: TTabSheet;
    memReceive: TMemo;
    memSend: TMemo;
    btnSend: TButton;
    ClientSocket1: TClientSocket;
    rbtnConnectionAddress: TRadioButton;
    edConnectionAddress: TEdit;
    rbtnConnectionHost: TRadioButton;
    edConnectionHost: TEdit;
    edConnectionPort: TEdit;
    LblPort: TLabel;
    Timer1: TTimer;
    procedure btnClientOpenClick(Sender: TObject);
    procedure btnClientCloseClick(Sender: TObject);
    procedure ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);

    procedure btnClearClientSocketLogClick(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Lookup(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure btnSendClick(Sender: TObject);
    procedure memSendKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure memReceiveChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    procedure AppActivate(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form_Main: TForm_Main;

implementation

{$R *.DFM}

procedure TForm_Main.FormCreate(Sender: TObject);
begin
btnClientClose.Enabled := False;
btnSend.Enabled := False;
Timer1.Enabled := False;
Application.OnActivate := AppActivate;
end;

// Client Socket Procedures and Functions

procedure TForm_Main.btnClientOpenClick(Sender: TObject);
begin
  //Set Connection Port or Service
    if edConnectionPort.Text = \'\' then
    messagebox(0, \'You must have a port to connect to\', \'Error\',32)
    else ClientSocket1.Port := StrToInt(edConnectionPort.Text);

  //Set Connection Address or Host
  if (rbtnConnectionAddress.Checked) then
    ClientSocket1.Address := edConnectionAddress.Text
  else if (rbtnConnectionHost.Checked) then
    ClientSocket1.Host := edConnectionHost.Text;

  lstClientActivity.Items.Add(\'Client: Opening...\');
  ClientSocket1.Open;
  lstClientActivity.Items.Add(\'Client: Open\');

  lstClientActivity.Items.Add(\'Local Host: \' + ClientSocket1.Socket.LocalHost);
  lstClientActivity.Items.Add(\'Local Address: \' + ClientSocket1.Socket.LocalAddress);
  lstClientActivity.Items.Add(\'Local Port: \' + IntToStr(ClientSocket1.Socket.LocalPort));
end;

procedure TForm_Main.btnClientCloseClick(Sender: TObject);
begin
  lstClientActivity.Items.Add(\'Client: Closing...\');
  ClientSocket1.Close;
  lstClientActivity.Items.Add(\'Client: Closed\');
end;

procedure TForm_Main.ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Connecting...\');
end;

procedure TForm_Main.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
btnClientClose.Enabled := True;
btnSend.Enabled := True;
btnClientOpen.Enabled := False;
Username.Enabled := False;
  lstClientActivity.Items.Add(\'Client: Connected\');
//ClientSocket1.Socket.SendText(\'NICK\' + char(10));
end;

procedure TForm_Main.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
lstClientActivity.Items.Add(\'Client: Disconnecting...\');
btnClientClose.Enabled := False;
btnSend.Enabled := False;
btnClientOpen.Enabled := True;
Username.Enabled := True;
memReceive.Text := memReceive.Text + Char(13) + char(10) + \'* Disconnected.\';
lstClientActivity.Items.Add(\'Client: Disconnected\');
end;

procedure TForm_Main.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  lstClientActivity.Items.Add(\'Client: Error\');
end;

procedure TForm_Main.ClientSocket1Lookup(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Lookup\');
end;

procedure TForm_Main.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Read\');
  memReceive.Text := memReceive.Text + char(13) + char(10) + Socket.ReceiveText;
  Timer1.Enabled := WindowState = wsMinimized;
end;

procedure TForm_Main.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
begin
  lstClientActivity.Items.Add(\'Client: Write\');
end;

//Other

procedure TForm_Main.btnClearClientSocketLogClick(Sender: TObject);
begin
  lstClientActivity.Items.Clear;
end;

procedure TForm_Main.btnSendClick(Sender: TObject);
begin
if Not (memSend.GetTextLen <= 0) then
if (ClientSocket1.Active) then
begin
    ClientSocket1.Socket.SendText(Username.Text + \': \' + memSend.Text);
    memSend.Text := \'\';
end
end;

procedure TForm_Main.memSendKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = 13 Then btnSend.Click;
end;

procedure TForm_Main.memReceiveChange(Sender: TObject);
begin
  memReceive.SelStart := Length(memReceive.Text);
  memReceive.Perform(EM_SCROLLCARET, 0, 0);
end;

procedure TForm_Main.Timer1Timer(Sender: TObject);
begin
  FlashWindow(Application.Handle, True);
end;

procedure TForm_Main.AppActivate(Sender: TObject);
begin
  Timer1.Enabled := False;
end;

end.
Avatar billede bratkid Nybegynder
02. maj 2001 - 23:03 #10
hmmm... det virkede ikke, men jeg fandt selv ud af det:

if Not (GetActiveWindow = Self.Handle) Or Not (pcLIFSR.ActivePage = tsTextChat) Then
FlashWindow(Application.Handle, True);
Avatar billede bratkid Nybegynder
02. maj 2001 - 23:04 #11
procedure TForm_Main.memReceiveChange(Sender: TObject);
begin
memReceive.SelStart := Length(memReceive.Text);
memReceive.Perform(EM_SCROLLCARET, 0, 0);
if Not (GetActiveWindow = Self.Handle) Or Not (pcLIFSR.ActivePage = tsTextChat) Then
FlashWindow(Application.Handle, True);
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester