Page 1 of 2 1 2 LastLast
Results 1 to 15 of 22

Thread: While Loop komt niet tot aan het Max. getal.

  1. #1
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75

    Lightbulb While Loop komt niet tot aan het Max. getal.

    Hallo ik heb in een programma een loop tussen 0 en 255 om lichten te dimmen (via telefoon app)

    ik heb daar een loop in die afhankelijk van de huidige lichtsterkte elke waarde kan bevatten tussen 0 en 255
    en afhankelijk of hij omhoog moet of omlaag moet moet hij dus op 255 (vol aan) of 0 (alles uit) terecht komen.

    op de een of andere reden doet hij net een loop te weinig als het begin getal GEEN veelvoud van vijf is (omdat ik stapjes van 5 maak)

    kan iemand mij hiermee helpen ?

    Code:
    procedure TForm1.LichtAanClick(Sender: TObject);
     
    begin
            while  < 255 do           // als i kleiner of gelijk aan 255 is dan lus door lopen
                begin
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Licht AAN: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;       // voorkomt het triggeren van zichzelf!!!
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   inc(i,5);
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
                end;
                XiTrackBar1.OnChange := XiTrackBar1Change;
    end;
    bij voorbaat dank.

  2. #2
    *+E13818MU01F0F* Norrit's Avatar
    Join Date
    Aug 2001
    Location
    Landgraaf
    Posts
    967
    while < 255 do // als i kleiner of gelijk aan 255 is dan lus door lopen

    dit is dus inderdaar niet wat je schrijft, dat zou "while <= 255" do zijn
    Objective reality is a delirium caused by lack of alcohol in blood

  3. #3
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    klopt maar dan gaat hij dus door tot het oneindige als de step 5 net over de 255 komt

    inc(i,5)

    bv begin waarde van i = 241
    dan is de volgende doorloop i
    246
    251
    256

    Maar zoals het nu is stopt hij dan al bij 251

    Ik zat zelf te denken om voor ik de while in ga I aan te vullen tot een vijfvoud (nog niet zeker hoe)
    Last edited by Richard63; 27-Aug-14 at 17:15.

  4. #4
    Quote Originally Posted by Richard63 View Post
    klopt maar dan gaat hij dus door tot het oneindige als de step 5 net over de 255 komt
    inc(i,5)
    Code:
    if i<=250 then inc(i,5) else i:=255;
    ?

    Als jij overigens zegt dat je in een oneindige loop komt dan zal dat waarschijnlijk zijn omdat je i als byte gedefinieerd hebt. Dat zou ik dan dus niet doen. Want als je met een byte 252 + 5 doet dan kom je weer op 2 uit. Dus maak van i een integer en je kunt wel gewoon inc(i,5) doen.

  5. #5
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    i is een integer.
    ik ben nu dit aan het proberen.
    var
    temp : integer;
    i : integer;
    begin
    temp := i/5;
    i := (int(temp)*5);
    etc....(while loop)

    maar krijg een error met incompatible types Integer and Extended

  6. #6
    Quote Originally Posted by Richard63 View Post
    i is een integer.
    Wat ik al suggereerde werkt dan ook gewoon hoor:
    Code:
    if i<=250 then inc(i,5) else i:=255;
    Je i komt dan nooit boven de 255.
    En als ie op 252 zat dan wordt ie dus ook 255.

    Alleen zou ik dat bovenaan zetten in de loop (zodat de 255 waarde ook naar de ComPort gestuurd wordt).
    Of i.p.v. een while loop er een repeat until loop van maken.

    Dus als het niet erg is om de eerste waarde niet te sturen zou je dit kunnen doen:
    Code:
      XiTrackBar1.OnChange := NIL; // voorkomt het triggeren van zichzelf!!!
      try
        repeat
          inc(i, 5);
          if i > 255 then i := 255;
          ComPort.WriteStr(IntToStr(i) + ',' + IntToStr(i) + ',' + IntToStr(i) + #10);
          Memo1.Lines.Add('Licht AAN: ' + IntToStr(i) + ',' + IntToStr(i) + ',' + IntToStr(i) + #10); // update status label met het ontvangen commando.
          XiTrackBar1.Position := i;
          Label5.Caption := IntToStr(i);
          sleep(30); // kleine wacht tijd anders gaat de loop te snel
        until i = 255;
      finally
          XiTrackBar1.OnChange := XiTrackBar1Change;
      end;

  7. #7
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Heb nu het volgende en dat werkt inderdaad!!!

    Code:
    procedure TForm1.LichtAanClick(Sender: TObject);
    
    begin
      XiTrackBar1.OnChange := NIL;       // voorkomt het triggeren van zichzelf!!!
    try
        repeat
          inc(i, 5);
          if i > 255 then i := 255;
          ComPort.WriteStr(IntToStr(i) + ',' + IntToStr(i) + ',' + IntToStr(i) + #10);
          Memo1.Lines.Add('Licht AAN: ' + IntToStr(i) + ',' + IntToStr(i) + ',' + IntToStr(i) + #10); // update status label met het ontvangen commando.
          XiTrackBar1.Position := i;
          Label5.Caption := IntToStr(i);
          sleep(30); // kleine wacht tijd anders gaat de loop te snel
        until i = 255;
      finally
          XiTrackBar1.OnChange := XiTrackBar1Change;
      end;
    end;

  8. #8
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    Nu nog het zelfde doen maar dan omgekeerd voor licht uit :-)

  9. #9
    Bijna hetzelfde
    Code:
          dec(i, 5);
          if i < 0 then i := 0;
          // ...
        until i = 0;

  10. #10
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    dat had ik al verwacht alleen deed ik i:=i-5; ipv dec(i,5); (weet alleen niet meer wat daar de reden van was lol)

    (werken inmiddels beide goed nu)

    Bedankt!!


    btw. kan een Tmemo ooit vol raken ???
    Last edited by Richard63; 27-Aug-14 at 17:59.

  11. #11
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    voor degene die het hele program code willen zien.

    met dit programma en een arduino (7€ uit china) kan ik met een app gemaakt op http://appinventor.mit.edu/explore/ het licht aan en uit zetten. (vertraagd)
    en een bioscoop effekt ervaren.

    Code:
    unit SimpleServer;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Sockets, CPort, SyncObjs, CellEditors, ComCtrls,
      XiTrackBar, inifiles;
    
    type
      TForm1 = class(TForm)
        ArduinoServer: TTcpServer;
        btnStartServer: TButton;
        btnStopServer: TButton;
        btnExitProgram: TButton;
        Memo1: TMemo;
        Label2: TLabel;
        IPAdress: TEdit;
        Label3: TLabel;
        PortNumber: TEdit;
        ComPortNumber: TEdit;
        Label4: TLabel;
        LichtAan: TButton;
        LichtUit: TButton;
        XiTrackBar1: TXiTrackBar;
        Label5: TLabel;
        UpDateLED: TButton;
        MovieMode: TLabel;
        MM_Status: TLabel;
        Label1: TLabel;
        Status_label: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        procedure btnStartServerClick(Sender: TObject);
        procedure btnStopServerClick(Sender: TObject);
        procedure btnExitProgramClick(Sender: TObject);
        procedure ArduinoServerAccept(Sender: TObject;
          ClientSocket: TCustomIpClient);
        procedure LichtAanClick(Sender: TObject);
        procedure LichtUitClick(Sender: TObject);
        procedure XiTrackBar1Change(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure UpDateLEDClick(Sender: TObject);
        procedure ReadLED(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1:                TForm1;
      ComPort:              TComport;
      ComDataPacket:        TcomDataPacket; // extra toegevoegd
      ComDataPacketPacket:  string;   // extra toegevoegd
      Event:                TEvent;
      Lightdata:            string;
      Data:                 string;
      i:                    integer;
      status:               string;
    
    implementation
    
    {$R *.dfm}
    
    function CtrlHandler(CtrlType: LongWord): Boolean;
    begin
      Event.SetEvent;
      Result := True;
    end;
    
    procedure TForm1.btnStartServerClick(Sender: TObject);
    begin
          //Event := TEvent.Create(nil, True, False, '');
          //SetConsoleCtrlHandler(@CtrlHandler, True);
    
          ComPort          := TComPort.Create(nil);
          ComPort.Port     := 'COM6';       // comport van arduino (varieerd)
          ComPort.BaudRate :=  br9600;
          ComPort.DataBits := (dbEight);
          ComPort.StopBits := (sbOneStopBit);
          //ComPort.FlowControl
    
         // ComDataPacket.ComPort := ComPort;      // extra toegevoegd
         // ComDataPacket.StartString  :='2';        // extra toegevoegd
         // ComDataPacket.StopString :='5';             // extra toegevoegd
         // ComDataPacket.OnPacket := ComDataPacketPacket; // extra toegevoegd
    // info gevonden op:
    // http://stackoverflow.com/questions/22436319/comport-readstr
    
          ComPort.Open; // open port
    
    // set Host IP en Poort nummer van Server. i.e. 192.168.2.23:7777     (instelbaar in program)
          ArduinoServer.LocalHost := IPAdress.Text;
          ArduinoServer.LocalPort := PortNumber.Text;
    
          ArduinoServer.Open;
          Memo1.Lines.Add(DateTimeToStr(Now)+': server started');
          btnStartServer.Enabled := False;
    
    // knoppen disabelen als server gestart is!
          IPAdress.Enabled := False;
          PortNumber.Enabled := False;
          ComPortNumber.Enabled := False;
    
          btnStopServer.Enabled := True;
          LichtAan.Enabled := True;
          LichtUit.Enabled := True;
          XiTrackBar1.Position  := 0;
    
    end;
    
    procedure TForm1.btnStopServerClick(Sender: TObject);
    begin
          ComPort.Close;
          ArduinoServer.Close;
          Memo1.Lines.Add(DateTimeToStr(Now)+': server stopped');
    
    // knoppen Enabelen als server gestopt is!
          IPAdress.Enabled := True;
          PortNumber.Enabled := True;
          ComPortNumber.Enabled := True;
          btnStartServer.Enabled := True;
    end;
    
    
    procedure TForm1.ArduinoServerAccept(Sender: TObject;  // TTcpServer
      ClientSocket: TCustomIpClient);
    var
      line: string;
      commands: string;
      HTTPPos: integer;
      VraagTekenPos: integer;
    
    begin
      line := ' ';
      //Memo1.Clear;
    
      while ClientSocket.Connected and (Line <> '') do
      begin
        Line := ClientSocket.Receiveln();
        Memo1.Lines.Add(Line);
        if Copy(Line,1,6) = 'GET /?' then  // zonder de slash als je urllib.urlretrieve gebruikt in python xbmc
                                           // MET slash als je de android app gebruikt. (aanpassen)
                                           // C:\Users\Gebruiker\AppData\Roaming\XBMC\scripts\playeractions.py
                                           // C:\Users\Gebruiker\AppData\Roaming\XBMC\userdata\autoexec.py
        begin
          HTTPPos := Pos('HTTP',Line);
          VraagTekenPos := Pos('?',Line);
          commands := Copy(Line,VraagTekenPos+1,HTTPPos-8);   // zoek naar de letters achter GET en vóór HTTP/x.x
    
          Status_label.Caption :=  commands;
    
           if commands = 'STATUS' then  // status van verlichting (aan of uit) en alle andere relevante data terug sturen naar de app.
    
           begin
                   if i > 0 then
                    begin
                      status := 'LICHT_AAN';
                    end;
                    if i < 1 then
                    begin
                      status := 'LICHT_UIT';
                    end;
    
    
                    if MM_Status.Caption = 'AAN' then
                        begin
                          status := status + ',MM_ON'
                        end;
                    if MM_Status.Caption = 'UIT' then
                        begin
                          status := status + ',MM_OFF'
                        end;
           end;
    
    
           if commands = 'LEVELUP' then  // licht stapje hoger
           begin
    
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Up: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
    
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   inc(i,5);
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
           end;
    
           if commands = 'LEVELDOWN' then  // licht stapje lager (dimmen)
           begin
    
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Down: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
    
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   i:=i-5;
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
           end;
    
    
           if (commands = 'XBMC_FADEUP') and (MM_Status.Caption = 'AAN')  then  // licht vol aan
           begin
    
         //  i:=0;  // niet nodig omdat de huidige waarde gebruikt word.
            while i <=255 do
             begin
    
            ClientSocket.Sendln('HTTP/1.0 200 OK');
            ClientSocket.Sendln('');
            ClientSocket.Sendln(status);    // vervangen door terug meldingen naar de app.
            ClientSocket.Close;
            Status_label.Caption := status;
    
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('DIM0: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   inc(i,5);
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
             end;
           end;
    
    // hieronder is voor XBMC (zodat ik het onafhankelijk kan aan of uit zetten van movie_mode mogelijk kan maken.
    
           if (commands = 'XBMC_FADEDOWN') and (MM_Status.Caption = 'AAN')  then // licht uit (gedimmed)
           begin
    
         //  i:=255;   // niet nodig omdat de huidige waarde gebruikt word.
            while i >=0 do
                begin
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Fade to 100%: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   i:=i-5;
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
            end;
           end;
    
           if (commands = 'XBMC_FADEUPHALF')  and (MM_Status.Caption = 'AAN') then  // licht gedimmed naar 50%
           begin
    
             while i < 75 do
                begin
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Fade to 100%: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   i:=i+5;  // (dimmen)
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
             end; // while i loop
           end;  // if commands loop
    
    // hieronder is voor Smartfoons
    
           if commands = 'FADEUP' then  // licht vol aan
           begin
    
         //  i:=0;  // niet nodig omdat de huidige waarde gebruikt word.
            while i <=255 do
             begin
    
            ClientSocket.Sendln('HTTP/1.0 200 OK');
            ClientSocket.Sendln('');
            ClientSocket.Sendln(status);    // vervangen door terug meldingen naar de app.
            ClientSocket.Close;
            Status_label.Caption := status;
    
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('DIM0: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   inc(i,5);
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
             end;
           end;
    
           if commands = 'FADEDOWN' then   // licht uit (gedimmed)
           begin
    
         //  i:=255;   // niet nodig omdat de huidige waarde gebruikt word.
            while i >=0 do
                begin
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Fade to 100%: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   i:=i-5;
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
            end;
           end;
    
           if commands = 'FADEUPHALF' then  // licht gedimmed naar 50%
           begin
    
             while i < 75 do
                begin
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Fade to 100%: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
                   XiTrackBar1.OnChange := NIL;
                   XiTrackBar1.Position  := i;
                   Label5.Caption := IntToStr(i);
                   i:=i+5;  // (dimmen)
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
             end; // while i loop
           end;  // if commands loop
    
    
    
           if commands = 'MOVIEMODEON' then  // zet movie mode aan
           begin
                   MM_Status.Caption := 'AAN';
    
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
    
           end;  // if commands loop
    
           if commands = 'MOVIEMODEOFF' then  // zet movie mode uit
           begin
                   MM_Status.Caption := 'UIT';
    
                   sleep(30); // kleine wacht tijd anders gaat de loop te snel
    
           end;  // if commands loop
    
          Memo1.Lines.Add('Commands: '+commands);  // update status label met het ontvangen commando.
          XiTrackBar1.OnChange := XiTrackBar1Change;
          end;
    end;
    
        ClientSocket.Sendln('HTTP/1.0 200 OK');
        ClientSocket.Sendln('');
        ClientSocket.Sendln(status);    // vervangen door terug meldingen naar de app.
        ClientSocket.Close;
        Status_label.Caption := status;
    end;
    
    
    procedure TForm1.LichtAanClick(Sender: TObject);
    
    begin
      XiTrackBar1.OnChange := NIL;       // voorkomt het triggeren van zichzelf!!!
    try
        repeat
          inc(i, 5);
          if i > 255 then i := 255;
          ComPort.WriteStr(IntToStr(i) + ',' + IntToStr(i) + ',' + IntToStr(i) + #10);
          Memo1.Lines.Add('Licht AAN: ' + IntToStr(i) + ',' + IntToStr(i) + ',' + IntToStr(i) + #10); // update status label met het ontvangen commando.
          XiTrackBar1.Position := i;
          Label5.Caption := IntToStr(i);
          sleep(30); // kleine wacht tijd anders gaat de loop te snel
        until i = 255;
      finally
          XiTrackBar1.OnChange := XiTrackBar1Change;
      end;
    end;
    
    
    procedure TForm1.LichtUitClick(Sender: TObject);
    
    begin
      XiTrackBar1.OnChange := NIL;
    try
        repeat
          dec(i,5);
          if i < 0 then i := 0;
          ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
          Memo1.Lines.Add('Licht UIT: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
          XiTrackBar1.Position  := i;
          Label5.Caption := IntToStr(XiTrackBar1.Position);
          sleep(30); // kleine wacht tijd anders gaat de loop te snel
        until i = 0;
     finally
          XiTrackBar1.OnChange := XiTrackBar1Change;
      end;
    end;
    
    
    procedure TForm1.XiTrackBar1Change(Sender: TObject);  // als onchange aan staat NIET programmatish de trackbar verschuiven (loop!!!)
    begin
    i := XiTrackBar1.Position;   // trackbar in stapjes van 5 mogelijk???????
            begin
        
                   ComPort.WriteStr(IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);
                   Memo1.Lines.Add('Trackbar: '+IntToStr(i)+','+IntToStr(i)+','+IntToStr(i)+#10);  // update status label met het ontvangen commando.
    
                   Label5.Caption := IntToStr(XiTrackBar1.Position);
                   sleep(30);
            end;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      appINI  :  TIniFile;
      IPAdres :  String;
      Port    :  String;
      SerPort :  String;
    
    begin
      appINI := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')) ;
       try
          IPAdres :=  appINI.ReadString('Network','IPAdres','') ; //if no IP Adres return an empty string
          Port    :=  appINI.ReadString('Network','Port','') ;    //if no ComPort return an empty string
          SerPort :=  appINI.ReadString('Arduino','SerPort','') ; //if no SerPort return an empty string
    
          // ShowMessage('Network IP ' + IPAdres +':'+ Port + ' en de compoort = '+ SerPort);
          IPAdress.Text        := IPAdres;
          PortNumber.Text      := Port;
          ComPortNumber.Text   := SerPort;
    
        finally
          appINI.Free;
    end;
      btnStartServer.Click;   // Start Server
      ReadLED(Sender);  // lees de LED.ini
    
    end;
    
    procedure TForm1.btnExitProgramClick(Sender: TObject);
    var
       appINI : TIniFile;
    begin
         UpDateLEDClick(Sender);  // bij afsluiten de huidige waarde schrijven in de LED.ini
         btnStopServerClick(Sender);
         appINI := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')) ;
     try
         appINI.WriteString('Network','IPAdres',IPAdress.Text) ;
         appINI.WriteString('Network', 'Port', PortNumber.Text) ;
    
       with appINI, Form1 do
         begin
         appINI.WriteString('Arduino','SerPort', ComPortNumber.Text) ;
         end;
       finally
         appIni.Free;
       end;
        Close;
    end;
    
    procedure TForm1.UpDateLEDClick(Sender: TObject);
    // schrijf de aktuele stand van de led's weg
    var
      LED   :  TIniFile;
      RED   :  String;
      GREEN :  String;
      BLUE  :  String;
      LEVEL :  String;
    begin
      LED := TIniFile.Create('.\LED.ini') ;
    
       try
          LED.WriteString('Channel1','RED','255');
          LED.WriteString('Channel1','GREEN','255');
          LED.WriteString('Channel1','BLUE','0');
          LED.WriteString('Master','LEVEL',IntToStr(i));
        finally
          LED.Free;
        end;
    end;
    
    procedure TForm1.ReadLED(Sender: TObject);
    // schrijf de aktuele stand van de led's weg
    var
      LED   :  TIniFile;
      RED   :  String;
      GREEN :  String;
      BLUE  :  String;
      LEVEL :  String;
    begin
      LED := TIniFile.Create('.\LED.ini') ;
       
       try
          RED   := LED.ReadString('Channel1','RED','');     // nog aanpassen aan ledkleur
          GREEN := LED.ReadString('Channel1','GREEN','');   // nu nog samen de kleur geel.
          BLUE  := LED.ReadString('Channel1','BLUE','');
          LEVEL := LED.ReadString('Master','LEVEL','');
        finally
          LED.Free;
        end;
        Label5.Caption := LEVEL;
        XiTrackBar1.Position  := StrToInt(LEVEL);
    end;
    
    
    end.

  12. #12
    Quote Originally Posted by Richard63 View Post
    btw. kan een Tmemo ooit vol raken ???
    Ja... dat kan.

    Aangezien een TMemo intern een TStrings bevat zit daar een "limiet".
    TStringList can hold up to 134,217,728 strings (MaxListSize+1). There are no limits on the size of the string (other than physical memory limits and processor address space limits).
    (bron)

    En een string kan weer 2GB groot zijn.

    Je zult er in de praktijk dus niet zo snel tegenaan lopen.

  13. #13
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Is geloof ik ook weer afhankelijk van de Delphi en/of Windows-versie.
    Vroegâh was er een limiet van (ik meen) 32kB of 64kB of zoiets...

    Maar het belangrijkste om niet te vergeten: naar mate een TMemo steeds meer gevuld is,
    hoe langzamer hij wordt (ook al gebruik je BeginUpdate/EndUpdate).

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

  14. #14
    Member Richard63's Avatar
    Join Date
    Jan 2014
    Location
    Heerenveen
    Posts
    75
    ok dan zal ik er een clean up on idle of zoiets in bouwen :-)

  15. #15
    Quote Originally Posted by VideoRipper View Post
    Is geloof ik ook weer afhankelijk van de Delphi en/of Windows-versie.
    Vroegâh was er een limiet van (ik meen) 32kB of 64kB of zoiets...
    Ja, mijn veronderstelling was voor een moderne Delphi en Windows.
    Ik zie nu dat het gaat om Delphi 7 dus dan komen de limieten toch sneller dichterbij.
    Het beste is dus de oudste regels te verwijderen bij het toevoegen van de nieuwe (bij > x aantal regels).

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

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

Tags for this Thread

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
  •