Forum > Windows CE

WINCE slow redraw

<< < (2/2)

NunoB:

--- Quote from: avra on March 08, 2018, 09:21:51 am ---
--- Quote from: NunoB on March 07, 2018, 09:53:45 pm ---I tested your suggestion on the example code I posted, where I'm not even using lists, so could this be a bug?
--- End quote ---
Shouldn't this error text at least ring a bell to you: "Exception=Cannot use find on unsorted list"?

--- End quote ---

Sure, that's the first thing I researched. But as I stated, in the simple example I posted, I'm not using TStringList anywhere, sorted or unsorted, much less doing a find. It's just a bunch of panels, a scrollbox and the easing class.
Here's the code of the two files:

mainform.pas:


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit mainform; {$mode objfpc}{$H+} interface uses  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,  StdCtrls, easing; type   { TMain }   TMain = class(TForm)    AudioPlayerPanel: TPanel;    BluetoothButtonPanel: TPanel;    ConfiguracaoButtonPanel: TPanel;    ContentPanel: TPanel;    FooterPanel: TPanel;    HomeButton: TImage;    ClockLabel: TLabel;    Image1: TImage;    Image10: TImage;    Image11: TImage;    Image12: TImage;    Image2: TImage;    Image3: TImage;    Image4: TImage;    Image5: TImage;    Image6: TImage;    Image7: TImage;    Image8: TImage;    Image9: TImage;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;    Label5: TLabel;    Label6: TLabel;    Label7: TLabel;    MenuContainerPanel: TScrollBox;    MenuMainPanel: TPanel;    MultimediaButtonPanel: TPanel;    NavegacaoButtonPanel: TPanel;    PaintBox1: TPaintBox;    ProgramasButtonPanel: TPanel;    RepeatPanel: TPanel;    PlayPanel: TPanel;    NextPanel: TPanel;    StopPanel: TPanel;    ShufflePanel: TPanel;    AudioPlayerTopPanel: TPanel;    PreviousPanel: TPanel;    TrackAlbum: TImage;    TrackAlbumLabel: TLabel;    TrackArtist: TImage;    TrackArtistLabel: TLabel;    TrackArtworkLarge: TImage;    TrackArtworkSmall: TImage;    Label1: TLabel;    ProgressHandlePanel: TPanel;    TrackArtistTitleLabel: TLabel;    MainPanel: TPanel;    HeaderPanel: TPanel;    AudioPlayerBottomPanel: TPanel;    HomeButtonPanel: TPanel;    ProgressBgPB: TPaintBox;    TrackBitrate: TLabel;    TrackGenre: TLabel;    TrackTitle: TImage;    TrackTitleLabel: TLabel;    ViaturaButtonPanel: TPanel;    procedure BluetoothButtonPanelMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure BluetoothButtonPanelMouseUp(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure ConfiguracaoButtonPanelMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure ConfiguracaoButtonPanelMouseUp(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure FormCreate(Sender: TObject);    procedure HomeButtonPanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure HomeButtonPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure MultimediaButtonPanelClick(Sender: TObject);    procedure MultimediaButtonPanelMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure MultimediaButtonPanelMouseMove(Sender: TObject;      Shift: TShiftState; X, Y: Integer);    procedure MultimediaButtonPanelMouseUp(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure NavegacaoButtonPanelMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure NavegacaoButtonPanelMouseUp(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure NextPanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure NextPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure PlayPanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure PlayPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure PreviousPanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure PreviousPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure ProgramasButtonPanelMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure ProgramasButtonPanelMouseUp(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure RepeatPanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure RepeatPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure ShufflePanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure ShufflePanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure StopPanelMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure StopPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure ViaturaButtonPanelMouseDown(Sender: TObject;      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure ViaturaButtonPanelMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure TweenScrollBy(Sender: TObject; startPoint, endPoint: integer;      Duration: integer; Direction: string; easeType: TChromeTabsEaseType);  private    { private declarations }  public    { public declarations }  end; var  Main: TMain;  CurrentVisibleMenu: TPanel;  MouseDownOnMenu: Boolean; implementation {$R *.lfm} { TMain } procedure TMain.HomeButtonPanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  HomeButtonPanel.Color := $000D70FF;  Application.Terminate;end; procedure TMain.HomeButtonPanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  HomeButtonPanel.Color := $007F7F7F;end; procedure TMain.BluetoothButtonPanelMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  BluetoothButtonPanel.Color := $000D70FF;  MouseDownOnMenu := True;end; procedure TMain.BluetoothButtonPanelMouseUp(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  BluetoothButtonPanel.Color := $00666666;  MouseDownOnMenu := False;end; procedure TMain.ConfiguracaoButtonPanelMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  ConfiguracaoButtonPanel.Color := $000D70FF;  MouseDownOnMenu := True;end; procedure TMain.ConfiguracaoButtonPanelMouseUp(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  ConfiguracaoButtonPanel.Color := $004C4C4C;  MouseDownOnMenu := False;end; procedure TMain.FormCreate(Sender: TObject);begin  CurrentVisibleMenu := MenuMainPanel;  MenuContainerPanel.DoubleBuffered := True;  MultimediaButtonPanel.DoubleBuffered := True;  NavegacaoButtonPanel.DoubleBuffered := True;  BluetoothButtonPanel.DoubleBuffered := True;  ProgramasButtonPanel.DoubleBuffered := True;  ViaturaButtonPanel.DoubleBuffered := True;  ConfiguracaoButtonPanel.DoubleBuffered := True;end; procedure TMain.MultimediaButtonPanelMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  MultimediaButtonPanel.Color := $000D70FF;  MouseDownOnMenu := True;end; procedure TMain.MultimediaButtonPanelMouseMove(Sender: TObject;  Shift: TShiftState; X, Y: Integer);begin  //TPanel(CurrentVisibleMenu).Left := Mouse.CursorPos.X;end; procedure TMain.MultimediaButtonPanelMouseUp(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  MultimediaButtonPanel.Color := $00666666;  MouseDownOnMenu := False;end; procedure TMain.MultimediaButtonPanelClick(Sender: TObject);begin  ShowMessage('teste');end; procedure TMain.NavegacaoButtonPanelMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  NavegacaoButtonPanel.Color := $000D70FF;  MouseDownOnMenu := True;end; procedure TMain.NavegacaoButtonPanelMouseUp(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  NavegacaoButtonPanel.Color := $004C4C4C;  MouseDownOnMenu := False;end; procedure TMain.NextPanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  NextPanel.Color := $000D70FF;  TweenScrollBy(CurrentVisibleMenu, -760, 0, 100, 'horizontal', tteaseInOutQuad);end; procedure TMain.NextPanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  NextPanel.Color := $00999999;end; procedure TMain.PlayPanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  PlayPanel.Color := $000D70FF;end; procedure TMain.PlayPanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  PlayPanel.Color := $00B2B2B2;end; procedure TMain.PreviousPanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  PreviousPanel.Color := $000D70FF;  TweenScrollBy(CurrentVisibleMenu, 0, -760, 100, 'horizontal', tteaseInOutQuad);end; procedure TMain.PreviousPanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  PreviousPanel.Color := $00B2B2B2;end; procedure TMain.ProgramasButtonPanelMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  ProgramasButtonPanel.Color := $000D70FF;  MouseDownOnMenu := True;end; procedure TMain.ProgramasButtonPanelMouseUp(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  ProgramasButtonPanel.Color := $004C4C4C;  MouseDownOnMenu := False;end; procedure TMain.RepeatPanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  RepeatPanel.Color := $000D70FF;end; procedure TMain.RepeatPanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  RepeatPanel.Color := $007F7F7F;end; procedure TMain.ShufflePanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  ShufflePanel.Color := $000D70FF;end; procedure TMain.ShufflePanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  ShufflePanel.Color := $00999999;end; procedure TMain.StopPanelMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  StopPanel.Color := $000D70FF;end; procedure TMain.StopPanelMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  StopPanel.Color := $00CCCCCC;end; procedure TMain.ViaturaButtonPanelMouseDown(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  ViaturaButtonPanel.Color := $000D70FF;  MouseDownOnMenu := True;end; procedure TMain.ViaturaButtonPanelMouseUp(Sender: TObject;  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  ViaturaButtonPanel.Color := $00666666;  MouseDownOnMenu := False;end; procedure TMain.TweenScrollBy(Sender: TObject; startPoint, endPoint: integer;  Duration: integer; Direction: string; easeType: TChromeTabsEaseType);var  i, j: integer;begin  for i := 1 to Duration do  begin    j := Trunc(CalculateEase(startPoint, endPoint, i, Duration, easeType));    if ((startPoint > endPoint) and (j < endPoint)) or      ((startPoint < endPoint) and (j > endPoint)) then      j := endPoint;     case Direction of      'vertical': TPanel(CurrentVisibleMenu).Top := j;      'horizontal': TPanel(CurrentVisibleMenu).Left := j;    end;     TPanel(CurrentVisibleMenu).Update;  end;end; end.
easing.pas:


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit easing; {$mode objfpc}{$H+} interface uses  Classes, SysUtils, Math; type  TChromeTabsEaseType = (    ttlinearTween,    tteaseInQuad,    tteaseOutQuad,    tteaseInOutQuad,    tteaseInCubic,    tteaseOutCubic,    tteaseInOutCubic,    tteaseInQuart,    tteaseOutQuart,    tteaseInOutQuart,    tteaseInQuint,    tteaseOutQuint,    tteaseInOutQuint,    tteaseInSine,    tteaseOutSine,    tteaseInOutSine,    tteaseInExpo,    tteaseOutExpo,    tteaseInOutExpo,    tteaseInCirc,    tteaseOutCirc,    tteaseInOutCirc    ); function CalculateEase(CurrentTime, StartValue, ChangeInValue, Duration: real;  EaseType: TChromeTabsEaseType): real; overload;function CalculateEase(StartPos, EndPos, PositionPct: real;  Duration: integer; EaseType: TChromeTabsEaseType): real; overload; implementation function CalculateEase(CurrentTime, StartValue, ChangeInValue, Duration: real;  EaseType: TChromeTabsEaseType): real;begin  case EaseType of    ttLinearTween:    begin      Result := ChangeInValue * CurrentTime / Duration + StartValue;    end;     ttEaseInQuad:    begin      CurrentTime := CurrentTime / Duration;       Result := ChangeInValue * CurrentTime * CurrentTime + StartValue;    end;     ttEaseOutQuad:    begin      CurrentTime := CurrentTime / Duration;       Result := -ChangeInValue * CurrentTime * (CurrentTime - 2) + StartValue;    end;     ttEaseInOutQuad:    begin      CurrentTime := CurrentTime / (Duration / 2);       if CurrentTime < 1 then        Result := ChangeInValue / 2 * CurrentTime * CurrentTime + StartValue      else      begin        CurrentTime := CurrentTime - 1;        Result := -ChangeInValue / 2 * (CurrentTime * (CurrentTime - 2) - 1) +          StartValue;      end;    end;     ttEaseInCubic:    begin      CurrentTime := CurrentTime / Duration;       Result := ChangeInValue * CurrentTime * CurrentTime * CurrentTime + StartValue;    end;     ttEaseOutCubic:    begin      CurrentTime := (CurrentTime / Duration) - 1;       Result := ChangeInValue * (CurrentTime * CurrentTime * CurrentTime + 1) +        StartValue;    end;     ttEaseInOutCubic:    begin      CurrentTime := CurrentTime / (Duration / 2);       if CurrentTime < 1 then        Result := ChangeInValue / 2 * CurrentTime * CurrentTime *          CurrentTime + StartValue      else      begin        CurrentTime := CurrentTime - 2;         Result := ChangeInValue / 2 * (CurrentTime * CurrentTime *          CurrentTime + 2) + StartValue;      end;    end;     ttEaseInQuart:    begin      CurrentTime := CurrentTime / Duration;       Result := ChangeInValue * CurrentTime * CurrentTime * CurrentTime *        CurrentTime + StartValue;    end;     ttEaseOutQuart:    begin      CurrentTime := (CurrentTime / Duration) - 1;       Result := -ChangeInValue * (CurrentTime * CurrentTime *        CurrentTime * CurrentTime - 1) + StartValue;    end;     ttEaseInOutQuart:    begin      CurrentTime := CurrentTime / (Duration / 2);       if CurrentTime < 1 then        Result := ChangeInValue / 2 * CurrentTime * CurrentTime *          CurrentTime * CurrentTime + StartValue      else      begin        CurrentTime := CurrentTime - 2;         Result := -ChangeInValue / 2 * (CurrentTime * CurrentTime *          CurrentTime * CurrentTime - 2) + StartValue;      end;    end;     ttEaseInQuint:    begin      CurrentTime := CurrentTime / Duration;       Result := ChangeInValue * CurrentTime * CurrentTime * CurrentTime *        CurrentTime * CurrentTime + StartValue;    end;     ttEaseOutQuint:    begin      CurrentTime := (CurrentTime / Duration) - 1;       Result := ChangeInValue * (CurrentTime * CurrentTime *        CurrentTime * CurrentTime * CurrentTime + 1) + StartValue;    end;     ttEaseInOutQuint:    begin      CurrentTime := CurrentTime / (Duration / 2);      if CurrentTime < 1 then        Result := ChangeInValue / 2 * CurrentTime * CurrentTime *          CurrentTime * CurrentTime * CurrentTime + StartValue      else      begin        CurrentTime := CurrentTime - 2;         Result := ChangeInValue / 2 * (CurrentTime * CurrentTime *          CurrentTime * CurrentTime * CurrentTime + 2) + StartValue;      end;    end;     ttEaseInSine:    begin      Result := -ChangeInValue * Cos(CurrentTime / Duration * (PI / 2)) +        ChangeInValue + StartValue;    end;     ttEaseOutSine:    begin      Result := ChangeInValue * Sin(CurrentTime / Duration * (PI / 2)) + StartValue;    end;     ttEaseInOutSine:    begin      Result := -ChangeInValue / 2 * (Cos(PI * CurrentTime / Duration) - 1) +        StartValue;    end;     ttEaseInExpo:    begin      Result := ChangeInValue * Power(2, 10 * (CurrentTime / Duration - 1)) +        StartValue;    end;     ttEaseOutExpo:    begin      Result := ChangeInValue * (-Power(2, -10 * CurrentTime / Duration) + 1) +        StartValue;    end;     ttEaseInOutExpo:    begin      CurrentTime := CurrentTime / (Duration / 2);       if CurrentTime < 1 then        Result := ChangeInValue / 2 * Power(2, 10 * (CurrentTime - 1)) + StartValue      else      begin        CurrentTime := CurrentTime - 1;         Result := ChangeInValue / 2 * (-Power(2, -10 * CurrentTime) + 2) +          StartValue;      end;    end;     ttEaseInCirc:    begin      CurrentTime := CurrentTime / Duration;       Result := -ChangeInValue * (Sqrt(1 - CurrentTime * CurrentTime) - 1) +        StartValue;    end;     ttEaseOutCirc:    begin      CurrentTime := (CurrentTime / Duration) - 1;       Result := ChangeInValue * Sqrt(1 - CurrentTime * CurrentTime) + StartValue;    end;     ttEaseInOutCirc:    begin      CurrentTime := CurrentTime / (Duration / 2);       if CurrentTime < 1 then        Result := -ChangeInValue / 2 * (Sqrt(1 - CurrentTime * CurrentTime) - 1) +          StartValue      else      begin        CurrentTime := CurrentTime - 2;         Result := ChangeInValue / 2 * (Sqrt(1 - CurrentTime * CurrentTime) + 1) +          StartValue;      end;    end;  end;end; function CalculateEase(StartPos, EndPos, PositionPct: real;  Duration: integer; EaseType: TChromeTabsEaseType): real;var  t, b, c, d: real;begin  c := EndPos - StartPos;  d := Duration;  t := PositionPct;  b := StartPos;   Result := CalculateEase(t, b, c, d, EaseType);end; end.
Besides, if I compile for win32 and include the ApplicationType directive, the app runs perfectly. When I compile and run for wince and include the ApplicationType directive, the problem arises.
So, if it runs perfectly in wince if I omit the ApplicationType directive, the problem must reside somewhere upstream in one of the includes and is specific for wince?

I'm using Lazarus v1.6.4 with FPC 3.0.2.

Excuse my ignorance, it's been 15 years since I last programmed in Pascal.

avra:
That error string is SErrFindNeedsSortedList in rtlconst.inc and can be tracked to a single usage in stringl.inc:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---function TStringList.Find(const S: string; out Index: Integer): Boolean;...  if Not Sorted then    Raise EListError.Create(SErrFindNeedsSortedList); 

--- Quote from: NunoB on March 08, 2018, 12:14:51 pm ---I'm not using TStringList anywhere, sorted or unsorted, much less doing a find.
--- End quote ---
It exists somewhere, and is not behaving properly on WinCE. If you are lucky then some of the components you have on the screen has it (memo or something else). Delete one by one to find out in runtime. Even make an empty project to see if it shows. If you are not lucky then problematic string list is not visual and you will have to examine any ancestor of anything you use if it has string list. Backup your project, then rip it off more and more to find what creates the problem. You can also use logging to find what line was last executed before that exception.


--- Quote ---I'm using Lazarus v1.6.4 with FPC 3.0.2.
--- End quote ---
You can try some older Lazarus (even with FPC 2.6.4), and you can try latest trunks. Maybe something changes in your favor.


--- Quote ---it's been 15 years since I last programmed in Pascal.
--- End quote ---
Welcome back

NunoB:
Cheers avra and thanks for your experienced and precious help.
Unfortunately, even an empty project (just a form, no objects) results in the same error, which means this is in fact a bug.
I'll try an earlier Lazarus/FPC, maybe I'll be able to pinpoint the revision where this bug was introduced.

Thanks also to Thaddy who actually realized this is a bug. It must be hard to keep Lazarus compatible with such an outdated OS such as WinCE and it's actually amazing how you guys managed to do this for so long.
I would have used VS and C++, but it's actually hard (if not impossible) to get a VS2005 with WinCE SDK working on a 64bit Win10 system, which is my development machine. It's also as hard to debug, since the emulator is a 32bit application and I wasn't able to get debug to work due to this fact.

That's why I opted for Lazarus, and I must say I'm very impressed with this IDE. Thanks again for all the help, this is an awesome community :)

All the best,

Nuno

avra:

--- Quote from: NunoB on March 12, 2018, 12:41:44 am ---Unfortunately, even an empty project (just a form, no objects) results in the same error, which means this is in fact a bug.
--- End quote ---
Then you can try to patch TStringList.Find not to raise that exception (maybe just try to return not found result instead), rebuild IDE, and see what happens with newly build empty project. If you play with it a little I think you can achieve enough for your purpose. You have a full source of everything, so you can be as much of a master as you need to.


--- Quote from: NunoB on March 12, 2018, 12:41:44 am ---I'll try an earlier Lazarus/FPC, maybe I'll be able to pinpoint the revision where this bug was introduced.
--- End quote ---
I would test Laz 1.2 + FPC 2.6.4 (if I remember well it was good on WinCE), but I would also test latest trunk versions of Laz and FPC. You can use fpcupdeluxe (google if you don't know what that is) to download those versions without affecting your current installation at all.

Navigation

[0] Message Index

[*] Previous page

Go to full version