bonjour a tous,je debute la programmation win32 avec delphi,
j'ai ecrit un petit programme qui ne fait qu'afficher l'heure dans la barre de titre de la fenetre active.
mais chaque fois je recois un message d'erreur de ce genre:
violation d'accès à l'adresse 004BE690 dans le module Project...Lecture de l'adresse 0189EF30
je sais que ce type de messages apparait lors de l'utilisation d'un objet non liberé....mais je n'ai utilisé qu'un seule objet...un TTimer...mon code est le suivant:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Timer1: TTimer;
PopupMenu1: TPopupMenu;
Aboutus1: TMenuItem;
Exit1: TMenuItem;
procedure Timer1Timer(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
procedure WatchChanges;
{ Procedure qui va effacer l'heure quand une fenetre perd le focus }
var
Form1 : TForm1;
TheForeGround
{ le courrant handle de la fenetre active }
,ThePrForeGround
{ le handle de la fenetre active ancienne }:THandle;
nCaption
{ Caption de l'ancienne fenetre active }
,CaptionFocused
{ Caption de la nouvelle fenetre active } : Array [0..255]of char;
implementation
{$R *.dfm}
function GetCaptionWithoutTime(const sCaption : string): PChar;
var
sTime : string;
dtTime : TDateTime;
begin
sTime := Copy(sCaption, Length(sCaption) - 7, 8);
if not TryStrToTime(sTime, dtTime) then
Result := PChar(sCaption)
else
Result := PChar(Copy(sCaption, 1, Length(sCaption) - 8));
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
text:string;
begin
TheForeGround := GetForegroundWindow;
try
GetWindowText(TheForeGround ,CaptionFocused ,256);
WatchChanges;
text:=timetostr(time);
SetWindowText(TheForeground ,Strcat(GetCaptionWithoutTime(CaptionFocused) ,PChar(text)));
finally
end;
ThePrForeGround := TheForeGround;
StrCopy(nCaption,CaptionFocused);
end;
procedure WatchChanges;
begin
if AnsiStrComp(GetCaptionWithoutTime(CaptionFocused),nCaption)<>0 then
begin
SetWindowText(ThePrForeground,GetCaptionWithoutTime(nCaption));
end;
end;
end.
j'apprecie vos reponses et votres aides,merci d'avance