Avatar billede -sippo- Nybegynder
26. august 2002 - 23:18 Der er 13 kommentarer og
1 løsning

opdag en ændring i .txt fil

er det muligt at få en program til at opdage at en .txt fil er blevent opdateret.

eks. jeg ændre bla.txt med notepad og med det samme jeg gemmer den så fortæller mit program mig (som køre i baggrunden) og filen er blevent ændret og loader den nye version af filen ind i sig igen.
Avatar billede hermandsen Juniormester
26. august 2002 - 23:27 #1
Hmmm... Du kunne jo sætte en timer til at undersøge om filens ændringsdato er blevet ændret...

That's the way I see it...
Avatar billede hermandsen Juniormester
26. august 2002 - 23:46 #2
Avatar billede -sippo- Nybegynder
26. august 2002 - 23:51 #3
hmm server ikke fundet. det med en timer ville det ik resultere i at den ville bruge meget proceser kraft.
Avatar billede hermandsen Juniormester
27. august 2002 - 00:03 #4
Hvordan ville du ellers gøre det?

Så skal du sætte en eller anden form for hook på filen, men hvordan det gøres har jeg absolut ingen anelse om!!!

Jeg tror at Timer-løsningen er det letteste/det der bruger mindst ressourcer...

Ellers må du få det program du editerer filen i til at sende en besked tilbage til dit program om at nu er filen redigeret...
Avatar billede -sippo- Nybegynder
27. august 2002 - 00:06 #5
har lige prøvet med timeren og den bruger slet ik så meget proces kraft som jeg havde troet. så tak for det.
Avatar billede hermandsen Juniormester
27. august 2002 - 00:10 #6
Velbekomse!
Takker for point! ;)
Avatar billede borrisholt Novice
27. august 2002 - 09:10 #7
http://www.experts-exchange.com/ er nede lige nu ... Så i må have mig undskyldt hvis dette er en dobbelt post.

Den rigtige løsning er at scanne efter directory ændringer i en tråd vha. findFirstNotify (tror jeg nok den hedder) any way. på Borrisholt.com er der et færdigt eksempel ...

Jens B
Avatar billede cautoo Nybegynder
28. august 2002 - 16:49 #8
hmm, du kunne også, i stedet for timeren, tjekke hver gang programmet blive aktiveret for filændringen er som regelsket efter brugeren har været i forbindelse med et andet program! og får alligevel først beskeden efter han har aktiveret dit program igen!!
Avatar billede borrisholt Novice
29. august 2002 - 10:54 #9
EN TIMER ER ALTID FORKERT !

Jens B
Avatar billede hermandsen Juniormester
29. august 2002 - 13:28 #10
>>borrisholt
Dog meget praktisk i nogle tilfælde! ;)
Avatar billede borrisholt Novice
29. august 2002 - 13:31 #11
OKI :-) Men nu mente jeg i forhold til dette projekt ... !

Jens B
Avatar billede hermandsen Juniormester
29. august 2002 - 14:34 #12
Oki! :)
Du skrev dog altid som i... øhhh, altid... :)

Nå, du har alligevel mere styr på det end mig, så jeg tror da på dig, og vil også give dig helt ret!!! Timere er ofte (ikke altid) forkerte!

Hvis man f.eks. skal lave en ClipBoard holder, så bør man ikke køre en OnTimer der tjekker om sidste indholdet af clipboardet er det samme som før... Her ville en WM være bedre... Dog er det for n00b'en (og forløbig også for mig der ikke forstår mig så meget på API-kald og Windows Messages) lettere og mere overskueligt at bruge en timer! :)
Avatar billede borrisholt Novice
29. august 2002 - 14:37 #13
sæt et Memo på en form og prøv så det her :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils,  Classes, Graphics, Controls, Forms,
  Dialogs, clipbrd, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    NextHandle: Word;
    procedure WMDRAWCLIPBOARD(var Message: TMessage); message WM_DRAWCLIPBOARD;
    procedure WMCHANGECBCHAIN(var Message: TMessage); message WM_CHANGECBCHAIN;
  protected


  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMCHANGECBCHAIN(var Message: TMessage);
begin
  if Message.WParam = NextHandle then
  begin
    NextHandle := Message.LParam;
  end
  else
  begin
    SendMessage(NextHandle,
                WM_CHANGECBCHAIN,
                Message.WParam,  // handle of window to remove
                Message.LParam); // handle of next window
  end;
end;

procedure TForm1.WMDRAWCLIPBOARD(var Message: TMessage);
var
  Data: THandle;
  Size: Integer;
  NewData : Pchar;
begin
  Data := ClipBoard.GetAsHandle(CF_TEXT);
  if Data = 0 then
    Exit;

  try
    Size := GlobalSize(Data);
    getMem(NewData, Size );
    ClipBoard.GetTextBuf(NewData, Size )
  finally
    // Free the pointer to the memory block.
    GlobalUnlock(Data);
  end;

  Memo1.Lines.Text :=  NewData;

  SendMessage(NextHandle,WM_DRAWCLIPBOARD,0,0);
end;

    procedure TForm1.FormCreate(Sender: TObject);
begin
  NextHandle := SetClipboardViewer(handle);
end;

end.

Flere timere du vi "af med ?" :-)

Jens B
Avatar billede hermandsen Juniormester
29. august 2002 - 15:28 #14
>>borrisholt
Det er tydeligt at se hvorfor du ligger øverst i Delphi-kategorien!
100% respekt! :)

Som sagt, jeg har ikke meget forstand på Windows Messages, men så kan jeg jo heldigvis søge hjælp her!!! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester