Avatar billede thomas_theis Nybegynder
21. marts 2004 - 00:24 Der er 4 kommentarer

onchange handler til TstringList

Jeg forsøger at hente en hel række filnavne ind i en tstringlist. Det går også fint. Der bliver så løbende lavet ændringer i denne liste og hver gang der bliver ændret noget skal et stringgrid opdateres. Jeg kan ikke skrive i stringgrid'et da der her kun står filnavnet, mens listen har filnavnet inklusiv drive/path.

Så såvidt jeg kan se er jeg nødt til at lave en onchange rutine der opdaterer mit stringgrid. Men det kan jeg ikke finde ud af at gøre. Nogen gode forslag...? Tak
Avatar billede fixxxer Nybegynder
21. marts 2004 - 03:27 #1
et skud fra hoften

public
procedure StringListOnChange(Sender: TObject);


procedure TForm1.StringListOnChange(Sender: TObject);
begin
  //opdater stringgrid
end;

//ved creation af dit stringlist:
MyStringList := TStringList.Create;
MyStringList.OnChange := StringListOnChange;
Avatar billede hrc Mester
21. marts 2004 - 12:34 #2
Jep. StringList har faktisk en OnChange event.

Hjælpeteksten:
--------------
Occurs immediately after the list of strings changes.

Delphi syntax: property OnChange: TNotifyEvent;

Description:
Write an OnChange event handler to respond to changes in the list of strings. For example, if the string list is associated with a control, the OnChange event handler could tell the control to repaint itself whenever the content of the list changes.

Whenever strings in the list are added, deleted, moved, or modified, the following events take place:

1    An OnChanging event occurs before the change.
2    The strings are added, deleted, moved, or modified.
3    An OnChange event occurs.

Note:    OnChange occurs for every change made to the list, regardless of whether the application calls BeginUpdate and EndUpdate around a series of changes.

Den sidste note er vigtig for i forbindelse med opbygning af listen må du koble OnChange fra for ikke at sløve operationen ned. Det må blive noget med:

procedure TForm1.OnStringListChange(Sender : TObject);
begin
  if UpdateCount > 0 then
    exit;

  ..
end;
Avatar billede hrc Mester
21. marts 2004 - 12:35 #3
Min kodeeksempel ang. opdatering af hele listen fordrer brug af BeginUpdate og EndUpdate (husk at have dem i en try-finally)
Avatar billede hrc Mester
21. marts 2004 - 13:44 #4
Jeg kan se eet problem med ovenstående idet det er en generel "event" for slette, tilføje, flytte og ændre, så kan man ikke se hvad der er sket og man ved ikke hvilken linie der er sket noget ved.


Umiddelbart ville jeg nedarve TStringList (nok rettere TStrings) til min egen variant som havde havde en ændret OnChange der ikke var en TNotifyEvent, men noget lignende dette: procedure (aSender : TObject; aLine : string; aIndex : integer; aChange: TChanges)

  aSender : TObject; - listen der er lavet
  aLine : string; - linien der er sket noget ved.
  aIndex : integer; - Indeks i listen. Ved sletning = -1
  aChange: TChanges; - scAdd, scDelete, scMove eller scChanged


I øvrigt, og det er min kæphest (beklager), så er det mindst lige så smart/let at have en TObjectList med klasser af TMyFiles som indeholder alle de oplysninger du har indsamlet om filerne, elsempelvis størrelse, dato, attributter og indhold/type.

Skulle ikke undre mig om TObjectList også har en OnChange idet jeg antager at TStrings er en nedarvet variant af TList.
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



IT-JOB