begin process at 2008 08 22 00:16:12
1 229 711 membres
519 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : probleme de violation d'acces [ Divers / Débutant(e) ] (lotfi213_b19)

probleme de violation d'acces le 10/11/2007 16:28:36

lotfi213_b19
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

Re : probleme de violation d'acces le 10/11/2007 22:45:29

cedricbi
J'ai testé ton programme et aucune erreur n'est survenue !
Peux-tu nous indiquer où tu as une erreur.


Le plus dur dans un programme c'est de savoir pourquoi il marche !


Re : probleme de violation d'acces le 10/11/2007 23:50:29

cantador
Membre Club
Je pense que tu as viré le caption de la forme et
comme ce cas n'est pas traité...

cantador

Re : probleme de violation d'acces le 11/11/2007 14:36:35

cantador
Membre Club
@lotfi213_b19 :

essaie comme ça :

procedure TForm1.Timer1Timer(Sender: TObject);
var
Heure: array[0..7] of char;
begin
StrPCopy(Heure, TimeToStr(time));
TextOut(TheForeGround, width div 2, 5, Heure, StrLen(Heure));
end;

Juste prévoir la récup du handle dans le create et sa libération dans le close..
plus besoin de WatchChanges ni de GetCaptionWithoutTime..

cantador


Classé sous : end, fenetre, active, procedure, scaption

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS