Probleme de violation d'acces

lotfi213_b19 Messages postés 36 Date d'inscription dimanche 31 décembre 2006 Statut Membre Dernière intervention 31 juillet 2010 - 10 nov. 2007 à 16:28
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 10 nov. 2007 à 23:50
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

2 réponses

cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011
10 nov. 2007 à 22:45
J'ai testé ton programme et aucune erreur n'est survenue !
Peux-tu nous indiquer où tu as une erreur.

<hr />Le plus dur dans un programme c'est de savoir pourquoi il marche !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
10 nov. 2007 à 23:50
Je pense que tu as viré le caption de la forme et
comme ce cas n'est pas traité...

cantador
0
Rejoignez-nous