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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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