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.
Annonceindlæg fra Computerworld
www.borrisholt.com - Shell API ligger der et eksempel på Animated Tray Icons.
Måske du kan bruge det til noget.
Prøv denne kode i en timers OnTimer event FlashWindow(Application.Handle, True);
prøver lige nicos forslag
okay....den blinkede hele tiden...også når den ikke var minimeret
jeg satte timer componented på formen og skrev: ontimer: FlashWindow(Application.Handle, True);
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;
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 )
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.
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);
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;
Kurser inden for grundlæggende programmering