Results 1 to 8 of 8

Thread: Memorystreams

  1. #1

    Memorystreams

    hoi hier een vraagje van mij.
    hoe kan ik een tmemorystream runtime aanmaken ???
    weet wel hoe je er een moet maken als het er 1 is en je deze dan definieert
    maar ik weet van te voren niet hoeveel ik er moet maken dat lees ik uit de database en aan de hand van het aantal wat ik daaruit lees wil ik streams maken dus als ik er 10 wil maken dan stream1 ,stream2, enz
    het zouden er best 50 kunnen zijn vandaar dat ik niet van te voren 50 streams wil definieren.

    mvg Nico

  2. #2
    Dan voeg je de streams die je gemaakt hebt toch toe aan een array of een lijst?
    We adore chaos because we like to restore order - M.C. Escher

  3. #3
    sorry larry maar snap niet wat je daarmee bedoelt
    ik wil bv bij het starten van de applicatie 30 streams maken van 1 tot 30 hoe doe ik zoiets dan ????
    Last edited by Dees; 06-Mar-08 at 20:25.

  4. #4
    Daar kun je (ondermeer) een TObjectList voor gebruiken. Onderstaande code maakt voor elk record in een dataset een stream aan. Vervolgens kun je door de lijst van streams wandelen met een loop.

    List is nu lokaal gedeclareerd, maar je kunt deze natuurlijk ook als FList een field van je form maken. Zodoende kun je onderstaande code bijvoorbeeld in het FormCreate event zetten, behalve List.Free, die zet je in FormDestroy. Of, als je die dataset nodig hebt, zoals ik in het voorbeeld, kun je het OnAfterOpen en OnBeforeClose event van je dataset gebruiken.
    Code:
    var
      List: TObjectList;
      Stream: TMemoryStream;
    begin
      // True (is standaard) betekent dat de objectlist zelf de memorystreams vrijgeeft.
      List := TObjectList.Create(True);
      try
        qryJouwQuery.First;
    
        while not qryJouwQuery.Eof do
        begin
          Stream := TMemoryStream.Create;
          List.Add(Stream);
    
          // Stream vullen met gegevens uit het actieve record?
        end;
    
        // Hier heb je een lijst, met voor elk record een TMemoryStream.
        for i := 0 to List.Count - 1 do
        begin
          Stream := TMemoryStream(List[i]);
          // Doe hier wat je wilt met je stream.
        end;
    
      finally
        List.Free;
      end;
    
    end;
    1+1=b

  5. #5
    Code:
    var
      MemStreamArray: array[1..30] of TMemoryStream;
      I: Integer;
    begin
      for I := Low(MemStreamArray) to High(MemStreamArray) do
        MemStreamArray[I] := TMemoryStream.Create;
    We adore chaos because we like to restore order - M.C. Escher

  6. #6
    bedankt larry ga dat even proberen.
    nog 1 vraag hoe kan ik dan later een bepaalde stream uit die array benaderen ???
    heb niet echt ervaring met array's alvast bedankt

    nico
    Last edited by Dees; 06-Mar-08 at 20:25.

  7. #7
    • Overbodige quotes verwijderd, zie Quoten

  8. #8
    Op dezelfde manier als die list, met als voordeel dat deze array-items al gedeclareerd zijn als TMemoryStream, dus een een typecast is niet nodig:
    Code:
      MemStreamArray[4].DoeWatJeWiltMetDeVierdeMemStream;
    Let wel op dat je bij een array zelf de stream ook weer moet vrijgeven:

    Code:
    for i := 1 to 30 do
    begin
      MemStreamArray[i].Free;
      MemStreamArray[i] := nil; // Niet noodzakelijk
    end;
    1+1=b

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •