Delphi ошибка list index out of bounds 0

In Delphi 2009, my program now produces a «List index out of bounds» error. It generates a popup box:

alt text
(source: beholdgenealogy.com)

I’m using the «Debug» Build Configuration that has all the Runtime error checking turned on. But this does not capture the error before it happens.

Is there any simple way to locate the source of this error in my program without having to put in breakpoints and narrow it down by trial and error?

Glorfindel's user avatar

Glorfindel

21.9k13 gold badges79 silver badges106 bronze badges

asked Jul 28, 2009 at 2:09

lkessler's user avatar

3

Do you have «Stop on Delphi Exceptions» turned on? (ToolsDebugger OptionsLanguage Exceptions [Delphi7]) Otherwise it won’t break in your sourcecode.

Also make sure that EListError is not in your «Exception Types to Ignore» list. This list is also found at ToolsDebugger OptionsLanguage Exceptions (Delphi 7).

answered Jul 28, 2009 at 6:34

The_Fox's user avatar

The_FoxThe_Fox

6,9722 gold badges43 silver badges69 bronze badges

5

madExcept (free) or EurekaLog (paid) may help. You can set them up to show/email a stack trace when an error occurs. I use EurekaLog in all my projects and it is invaluable for fixing these kinds of things.

answered Jul 28, 2009 at 3:12

SeanX's user avatar

SeanXSeanX

1,85120 silver badges28 bronze badges

6

Hey, you don’t need any additional tools to track this! :)

Just run your application under debugger and make sure that «Stop on Delphi Exceptions» (or whatever it is called in your Delphi’s version) is turned ON.

When exception occurs — there will be a notification from debugger. Press «Ok»/»Debug» button and just view the call stack. Call stack window is shown automatically in recent Delphi’s version. If you can not see it — go to «View»/»Debug Windows»/»Call stack».

That’s all. The call stack will point you at the exact location of the problem. No additional tool needed.

Those tools (EurekaLog, JCL or madExcept) are needed if you distribute your program among users and want to gather bug-reports about problems on client side. I.e. there is no debugger to check the problem.

answered Jul 28, 2009 at 7:26

Alex's user avatar

AlexAlex

5,4372 gold badges36 silver badges56 bronze badges

5

As this is an RTL/VCL error, you often end up with better breaking/callstack behaviour if you enable Debug DCU’s (and rebuild).

answered Jul 28, 2009 at 6:39

Paul-Jan's user avatar

Paul-JanPaul-Jan

16.7k1 gold badge63 silver badges95 bronze badges

1

Any hints what your application’s doing when this occurs? A long loop? A button click?

When the application halts and you look at the call stack debug window, can you trace the call back to the last call from your code? The call stack won’t tell you all of the conditions, but can narrow down the location.

Once you narrow down the call, a logging tool like CodeSite can be really useful. For instance, I often log loop control variables to figure out which iteration occurs last before the error, then it’s a matter of identifying likely suspects.

answered Jul 28, 2009 at 2:49

Argalatyr's user avatar

ArgalatyrArgalatyr

4,6393 gold badges36 silver badges62 bronze badges

4

for listbox, tstrings,…
means that the index is beyond the list->count, . .
example of tString->strnigs[?]; [?] is < 0 or > (tString->count-1) will result out of bounds error.

as for NMPop3, etc,…
if use pop3client to fetch email, it has a bugs to some unix/? pop3 server,
that I have came across using it to fetch email from mail.???.com but ok with some.

at last I have to rewrite my pop3client application with tclientsocket instead of tnmpop3.
now works with every of the pop3server that I connected to.

hope this help & good luck

answered May 31, 2013 at 4:49

James Chong's user avatar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls;
 
type
 
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    MainMenu1: TMainMenu;
    ColorDialog1: TColorDialog;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
 
    procedure N4Click(Sender: TObject);
  
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Buff: TBitmap;
  mas: array of integer;
  Lmas:integer;
  bw: integer;
  bh: integer;
  LStr: integer;
  Nbit: integer;
  Clr: TColor;
 
implementation
 
{$R *.dfm}
    procedure Ris1;
var
  i, j, m, k, a, b: integer; {ïåðåìåííûå íåîáõîäèìûå â êà÷åñòâå ñ÷åò÷èêîâ, à òàêæå äëÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé}
begin
 
  if Lmas<>0 then {âûïîëíÿåì äåéñòâèÿ ïî îòîáðàæåíèþ äàííûõ, åñëè äëèíà âõîäíîãî ìàññèâà íå ðàâíà íóëþ}
  begin
   PatBlt(Buff.Canvas.Handle,0,0,Buff.Width,Buff.Height,blackness);
{î÷èñòêà áèòîâîé ìàòðèöû ïóòåì ðèñîâàíèÿ íà íåé ÷åðíîãî ïðÿìîóãîëüíèêà}
    Buff.Canvas.Pen.Color := Clr; {çàäàåì öâåò äëÿ ðèñîâàíèÿ åäèíè÷íûõ ýëåìåíòîâ}
    for i := 1 to ((Form1.Width-10) div bh) do {îðãàíèçóåì öèêë îò åäèíèöû äî ÷èñëà ñòðîê, ïîìåùàþùèõñÿ íà ýêðàíå}
    begin
      for m := 0 to bh-1 do {îðãàíèçóåì öèêë â ñîîòâåòñòâèè ñ ìàñøòàáîì ïî âåðòèêàëè}
      begin
        k := i*LStr-1+Nbit; {âû÷èñëÿåì íîìåð ýëåìåíòà â ìàññèâå mas, ÿâëÿâøåãîñÿ ïîñëåäíèì â ïðåäûäóùåé ñòðîêå}
        b := bh*i+m+10; {âû÷èñëÿåì çíà÷åíèå êîîðäèíàòû ïî îñè y îòîáðàæàåìîé ñòðîêè ýëåìåíòîâ}
        for j := 1 to LStr do {îðãàíèçóåì öèêë ïî âñåì ýëåìåíòàì ñòðîêè îò ïåðâîãî äî LStr}
        begin
          inc(k); {âû÷èñëÿåì íîìåð k ýëåìåíòà ìàññèâà mas, êîòîðûé äîëæåí áûòü îòîáðàæåí}
          if k>=Lmas then break; {åñëè î÷åðåäíîé íîìåð ýëåìåíòà ìàññèâà mas ïðåâûøàåò ëèáî ðàâåí äëèíå ìàññèâà Lmas, òî öèêë îòîáðàæåíèÿ áóäåò çàâåðøåí; äàííîå óñëîâèå âûïîëíÿåòñÿ ïðè âûâîäå íà ýêðàí íåïîëíîé ïîñëåäíåé ñòðîêè}
          if mas[k] = 1 then {åñëè k-é ýëåìåíò ìàññèâà åäèíèöà, òî ðèñóåì ëèíèþ äëèíû bw çàäàííûì öâåòîì}
          begin
            a := 10+j*bw;
            Buff.Canvas.MoveTo(a-bw, b);
            Buff.Canvas.LineTo(a, b);
          end;
        end;
      end;
    end;
    Form1.Canvas.Draw(0, 0, Buff); {êîïèðóåì áèòîâóþ ìàòðèöó íà êàíâó ôîðìû}
  end;
end;
 
   procedure Ris2;
var
 i, j, k: integer; {ïåðåìåííûå íåîáõîäèìûå â êà÷åñòâå ñ÷åò÷èêîâ, à òàêæå äëÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé}
begin
 
  if Lmas<>0 then {âûïîëíÿåì äåéñòâèÿ ïî îòîáðàæåíèþ äàííûõ, åñëè äëèíà âõîäíîãî ìàññèâà íå ðàâíà íóëþ}
  begin
   PatBlt(Buff.Canvas.Handle,0,0,Buff.Width,Buff.Height,blackness);
{î÷èñòêà áèòîâîé ìàòðèöû ïóòåì ðèñîâàíèÿ íà íåé ÷åðíîãî ïðÿìîóãîëüíèêà}
    Buff.Canvas.Font.Color := Clr; {çàäàåì öâåò äëÿ îòîáðàæåíèÿ åäèíè÷íûõ è íóëåâûõ ýëåìåíòîâ}
    Buff.Canvas.Brush.Color := clBlack; {çàäàåì öâåò ôîíà}
    for i := 1 to (Form1.Width div 12) do {îðãàíèçóåì öèêë îò åäèíèöû äî ÷èñëà ñòðîê, ïîìåùàþùèõñÿ íà ýêðàíå}
    begin
      k := i*LStr-1+Nbit; {âû÷èñëÿåì íîìåð â ìàññèâå mas ïîñëåäíåãî ýëåìåíòà ïðåäûäóùåé ñòðîêè}
      for j := 1 to LStr do {îðãàíèçóåì öèêë ïî âñåì ýëåìåíòàì ñòðîêè îò ïåðâîãî äî LStr}
      begin
        inc(k); {âû÷èñëÿåì íîìåð k ýëåìåíòà ìàññèâà mas, êîòîðûé äîëæåí áûòü îòîáðàæåí}
        if k>=Lmas then break; {åñëè î÷åðåäíîé íîìåð ýëåìåíòà ìàññèâà mas ïðåâûøàåò ëèáî ðàâåí äëèíå ìàññèâà Lmas, òî öèêë îòîáðàæåíèÿ áóäåò çàâåðøåí; äàííîå óñëîâèå âûïîëíÿåòñÿ ïðè âûâîäå íà ýêðàí íåïîëíîé ïîñëåäíåé ñòðîêè}
        if mas[k] = 0 then Buff.Canvas.TextOut(j*8, 12*i-4, '0')
          else Buff.Canvas.TextOut(j*8, 12*i-4, '1'); {îòîáðàæàåì k-é ýëåìåíò ìàññèâà íà êàíâå ôîðìû}
      end;
    end;
    Form1.Canvas.Draw(0, 0, Buff); {êîïèðóåì áèòîâóþ ìàòðèöó íà êàíâó ôîðìû}
  end;
end;
 
procedure TForm1.N4Click(Sender: TObject);
var
 
    f: file of byte; {ôàéëîâàÿ ïåðåìåííàÿ äëÿ ðàáîòû ñ òèïèçèðîâàííûì ôàéëîì, ñîäåðæàùèì áàéòû}
    i, z: integer; {ïåðåìåííûå, èñïîëüçóåìûå êàê ñ÷åò÷èêè}
    d: byte; {ïåðåìåííàÿ, èñïîëüçóåìàÿ äëÿ ÷òåíèÿ áàéòà èç ôàéëà}
begin
 
  if not OpenDialog1.Execute then exit;{åñëè ôàéë íå âûáðàí, òî ðàáîòà ïðîöåäóðû çàâåðøàåòñÿ}
  try {íà÷àëî áëîêà îáðàáîòêè èñêëþ÷èòåëüíîé ñèòóàöèè; äàæå â ñëó÷àå îøèáêè ïðè âûïîëíåíèè îïåðàòîðîâ ðàáîòû ñ ôàéëîì, áóäóò âûïîëíåíû îïåðàòîðû, ðàçìåùåííûå ïîñëå îïåðàòîðà finally, òî åñòü ôàéë f áóäåò çàêðûò}
    AssignFile(f, OpenDialog1.FileName); {ñ ôàéëîâîé ïåðåìåííîé f ñâÿçûâàåòñÿ ôàéë, âûáðàííûé ñ ïîìîùüþ êîìïîíåíòà OpenDialog1}
    Reset(f); {ôàéë f îòêðûâàåòñÿ äëÿ ÷òåíèÿ}
   
{â ïàíåëè ñòàòóñà îòîáðàæàåì èìÿ îòêðûâàåìîãî ôàéëà}
    i := 0; {óñòàíàâëèâàåì â 0 çíà÷åíèå ñ÷åò÷èêà ñ÷èòàííûõ áèò}
    while not eof(f) do {âûïîëíÿåì öèêë ïîêà íå äîñòèãíóò êîíåö ôàéëà f}
    begin
      Read(f, d); {÷èòàåì èç ôàéëà f áàéò d}
      for z := 0 to 7 do {öèêë çàïèñè áèò áàéòà d â ìàññèâ mas}
      begin
        SetLength(mas, i+1); {óñòàíàâëèâàåì äëèíó ìàññèâà mas ðàâíîé íîìåðó ñ÷èòûâàåìîãî áèòà ïëþñ îäèí}
        mas[i] := (d shr z) and 1; {ïðè ðàçëè÷íûõ z ïîñëåäîâàòåëüíî ïðèñâàèâàåì î÷åðåäíîìó çíà÷åíèþ ìàññèâà çíà÷åíèå áèòà áàéòà d, ñíà÷àëà ìëàäøåãî áèòà, äàëåå âòîðîãî áèòà è òàê äî ñàìîãî ñòàðøåãî áèòà áàéòà d}
        inc(i); {óâåëè÷èâàåì íà îäèí ñ÷åò÷èê ñ÷èòàííûõ áèò}
      end;
    end;
    Lmas := i; {îáùåå ÷èñëî ñ÷èòàííûõ áèò}
  finally
    CloseFile(f); {çàêðûòèå ôàéëà f}
  end;
  if N5.Checked then Ris1 else Ris2;
 {â çàâèñèìîñòè îò âûáðàííîãî ðåæèìà îñóùåñòâëÿåòñÿ çàïóñê ïðîöåäóðû îòîáðàæåíèÿ â ãðàôè÷åñêîì âèäå Ris1 ëèáî â òåêñòîâîì Ris2; ïóíêò ìåíþ N5, ñîîòâåòñòâåííî, îòâå÷àåò çà âûáîð ãðàôè÷åñêîãî ðåæèìà, N6 - çà âûáîð òåêñòîâîãî ðåæèìà}
end;
 
 
 
initialization
Buff := TBitmap.Create;
  Buff.Width := Screen.Width;
  Buff.Height := Screen.Height;
   finalization
  Buff.Free;
 
 
end.

>
помогите поправить код на Delphi
, вылетает с ошибкой elisterror list index out of bounds (0)

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
26.01.10, 12:42

    Здравствуйте знатоки. Задали задачку по мат. моду, нужно реализовать программу которая моделирует движение космического корабля относительно земли. В принципе писать можно на чем угодно, в основном пишут на маткаде и матлабе, я выбрал на делфи. Набросал код, но вылетает с ошибкой, блин хоть убей не пойму где косяк, поправьте пожалуйста. Прога запускается, но когда нажимаешь на кнопку для расчета вылетает с ошибкой elisterror list index out of bounds (0) код ниже

    ExpandedWrap disabled

      procedure TForm1.Button1Click(Sender: TObject);

      var

      //———————————————

      x,y,z,time,vx,vy,vz,rad_v:array[0..5000] of real ;

      TT,vs,v0,t,dt:Extended;

      h,h2,r,MM,G,m:Extended;

      i,j,k:integer;

      begin

      Chart1.Series[0].Clear;

      //Chart1.Series[1].Clear;

      //Chart1.Series[2].Clear;

      if edit1.Text =» then ShowMessage(‘Введите скорость станции!’) else

      Begin

      if edit2.Text =» then ShowMessage(‘Введите скорость аппарата!’) else

      Begin

      h:=strtofloat(Edit1.Text);

      v0:=strtofloat(Edit2.Text);

      G:=6.67e-11;//—-гравит-я пост

      MM:=6e+24;//—масса Земли

      m:=strtofloat(Edit3.Text); //масса аппарата

      h2:=6400000;//радиус Земли(м)

      h:=h*h2;

      R:=h+h2;

      vs:=sqrt(G*MM/R);//скорость

      t:=0; //——-время

      dt:=10;//——шаг по времени

      TT:=(2*Pi*(r+h))/vs; //——-период станции

      k:=1000;

      //————————————

      t:=dt;

      i:=0;

      time[0]:=0;

      //—Начальные условия

      x[0]:=R;

      y[0]:=0;

      z[0]:=0;

      vx[0]:=0;

      vy[0]:=vs;

      vz[0]:=v0;

      //rad_v[0]:=sqrt(x[0]*x[0]+y[0]*y[0]+z[0]*z[0]);

      //showmessage(floattostr(R));

      //showmessage(floattostr(rad_v[0]));

      while (i<5000) do

      begin

      rad_v[i]:=sqrt(x[i]*x[i]+y[i]*y[i]+z[i]*z[i]);

      if rad_v[i]=0 then begin showmessage(‘радиус вектор=0’); showmessage(floattostr(i)); break; end;

      vx[i+1]:=vx[i]-(G*MM*x[i]*dt)/(rad_v[i]*rad_v[i]*rad_v[i]*m);

      x[i+1]:=x[i]+dt*vx[i+1];

      vy[i+1]:=vy[i]-(G*MM*y[i]*dt)/(rad_v[i]*rad_v[i]*rad_v[i]*m);

      y[i+1]:=y[i]+dt*vy[i+1];

      vz[i+1]:=vz[i]-(G*MM*z[i]*dt)/(rad_v[i]*rad_v[i]*rad_v[i]*m);

      z[i+1]:=z[i]+dt*vz[i+1];

      i:=i+1;

      // t:=t+dt;

      if i<>0 then begin t:=t+dt; time[i]:=t; end;

      end;

      // showmessage(floattostr(rad_v[0]));

      //—————график————————-

      Chart1.Series[0].XValues.Order:=loNONE;

      for j:=0 to i-1 do

      begin

      Chart1.Series[0].AddXY(time[j],rad_v[j]);

      end;

      //—————————————


    Павел Калугин



    Сообщ.
    #2

    ,
    26.01.10, 12:50

      Вылеет за границы списка. Список тут Chart1.Series. Возможно он пуст? То есть в нем отсутствует значение с индексом 0

      Добавлено 26.01.10, 12:50
      Для уточнения где ошибка пройти в пошаговом режиме.


      mnemonik



      Сообщ.
      #3

      ,
      26.01.10, 12:52

        ммм, что то не понял, напишите пожалуйста подробнее.
        в пошаговом пробовал, доходит до конца, прога запускается, а когда нажимаешь кнопку (button1) делфи сам вываливается, с ошибкой что то вроде elisterror list index out of bounds, и далее уже не выполняется, приходится перезапускать делфю, не могу поймать место с которого так глючить начинает

        Сообщение отредактировано: mnemonik — 26.01.10, 12:55

        Profi

        ttiger



        Сообщ.
        #4

        ,
        28.01.10, 09:10

          Moderator

          *****

          Рейтинг (ф): 166

          Цитата mnemonik @ 26.01.10, 12:42

          когда нажимаешь на кнопку для расчета вылетает с ошибкой elisterror list index out of bounds (0) код ниже

          Кнопка расчета — Button1?

          Наведи курсор на строку

          ExpandedWrap disabled

            Chart1.Series[0].Clear;

          и нажми F5 (появится брекпойнт).
          Запусти прогу по F9 .
          Прога остановится на строке.
          Нажми F8. Если строку минует успешно-найди ту, на которой ошибку выдает.

          Скорее всего, ошибка в первой строчке. Ты не задал серии в чарте.
          Кликни по нему дважды и задай нужное количество серий. При обращении помни, что номерация списка начинается с нуля.

          Profi

          ttiger



          Сообщ.
          #5

          ,
          01.02.10, 10:08

            Moderator

            *****

            Рейтинг (ф): 166

            Вопрос решен или нет?

            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

            0 пользователей:

            • Предыдущая тема
            • ПОМОЩЬ СТУДЕНТАМ
            • Следующая тема

            [ Script execution time: 0,0332 ]   [ 15 queries used ]   [ Generated: 21.06.23, 19:17 GMT ]  

            delphi

            i posted a question on Fixing an error in a method declaration in a form in Delphi but after getting it fixed another error popped up upon compiling and its saying project project1.exe raised exception class EStringListError with message ‘list index out of bounds(0)’.when i press continue its not working but when i press break its flashing on the code neraz:=true;
            this is my code below

            Procedure Reload;
            var
                i:integer;
            begin
            form1.ListBox1.Clear;
            form1.ListBox2.Clear;
            if neraz then
            HD;
            neraz:=true;//..................here
            form1.Label3.Caption:='free: '+inttostr(vs*32)+' byte'+#10#13+'cluster size = 32 bytes';
              i:=TABLE[nk1].nach;
               KolP1:=0; KolP2:=0;
               while (FAT[i]<>1024)  do begin
                  if TABLE[fat[i]].tip then begin
                      form1.ListBox1.Items.Add('dir>'+TABLE[fat[i]].name);
                      inc(kolP1);
                  end
                  else
                      if TABLE[fat[i]].format='txt' then
                            form1.ListBox1.Items.Add('f_text> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format)
                      else
                            form1.ListBox1.Items.Add('f_bin> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format);
                  if (fat[i]<>0) then
                  i:=fat[i];
               end;
               i:=TABLE[nk2].nach;
               while (FAT[i]<>1024)  do begin
                  if TABLE[FAT[i]].tip then begin
                      form1.ListBox2.Items.Add('dir>'+TABLE[fat[i]].name);
                      inc(kolP2)
                  end
                  else
                      if TABLE[fat[i]].format='txt' then
                            form1.ListBox2.Items.Add('f_text> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format)
                      else
                            form1.ListBox2.Items.Add('f_bin> '+TABLE[fat[i]].name+'.'+TABLE[fat[i]].format);
                  if (fat[i]<>0) then
                  i:=fat[i];
               end;
               vfail;
            end;
            
            
            procedure HD;
            var
              i: integer;
            begin
              for i := 0 to 49 do begin
                with form2.ListView1.Items[i] do begin
                  SubItems[0] := TABLE[i].name;
                  SubItems[1] := TABLE[i].format;
                  if TABLE[i].tip then
                    SubItems[2] := 'folder'
                  else
                    SubItems[2] := 'file';
                  SubItems[3] := IntToStr(TABLE[i].nach);
                  SubItems[4] := IntToStr(TABLE[i].razmer);
                end;
                form2.ListView2.Items[i].SubItems[0] := IntToStr(fat[i]);
              end;
            end;
            

            Related Question

              Автор Сообщение

              Заголовок сообщения: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 19 ноя 2021, 04:39 

              Не в сети



              Зарегистрирован: 19 ноя 2021, 03:49
              Сообщений: 6

              Долгое время использовал бесплатную версию DBGridEh в своем проекте. Проект этот создан на D7. В принципе все устраивало, компонент стабильный, возможностей достаточно много, но… Не хватало самую малость. CellButtons — то что мне нужно сейчас. Установил оценочную версию EhLib.VCL 10.1 и началось…
              1. Самое неприятное, повторяемость 100%:
              Сейчас опишу лишь вариант воспроизведения глюка, зачем мне это нужно было, опустим.
              Создаем пустой проект, кидаем на него DBGridEh. Далее Ctl+C, Ctrl+V. Грид конечно вставится, но с многочисленным сообщением «List index out of bounds (0)»

              Вложение:

              1.jpg
              1.jpg [ 82.85 KiB | Просмотров: 749 ]

              2. Кидаем датасет, добавляем колонки в грид, добавляем CellButtons. В первой у меня заполнен Glyph, Вторая DropDown, третья тоже Glyph но из ImageList. Вроде бы все хорошо, но как-то некрасиво.

              Вложение:

              2.jpg
              2.jpg [ 45.03 KiB | Просмотров: 749 ]

              Делаем Uses XPMan. Теперь красиво, но, что стало с кнопками? Почему теперь не видно картинки на неактивных кнопках?

              Вложение:

              3.jpg
              3.jpg [ 40.06 KiB | Просмотров: 749 ]

              Ну вот как покупать такое «изделие»?
              Господа разработчики, у вас что, тестировщиков совсем нет?

              Ну и как пожелание:
              Есть гриды с высотой строки больше стандартной. а CellButtons в таких строках имеют стандартную высоту. Выглядит это не очень. Хотелось бы иметь возможность менять высоту этих кнопок в соответствии с высотой строк или произвольно, а также размещать эти кнопки в ряд не только горизонтально, но и вертикально, если высота строки это позволяет.

              Вложение:

              4.jpg
              4.jpg [ 34.54 KiB | Просмотров: 749 ]

              Вернуться наверх

              Профиль  

              EhLibSupport

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 23 ноя 2021, 23:37 

              Не в сети



              Зарегистрирован: 21 дек 2011, 18:48
              Сообщений: 1509

              Добрый день.

              Цитата:

              1
              Создаем пустой проект, кидаем на него DBGridEh. Далее Ctl+C, Ctrl+V. Грид конечно вставится, но с многочисленным сообщением «List index out of bounds (0)»

              На гриде без столбцов или с двумя созданными столбцами.
              В окружении EhLib 10.1.023 Evaluation, Delphi 7 (Build 4.453), Windows 10 (Microsoft Windows [Version 10.0.19043.1348])
              К сожалению на наших компьютерах ошибка не воспроизводится.

              Есть ли у вас возможность проверить, воспроизводится ли ошибка на других компьютерах, других ОС, других Формах (TForm)?
              Возможно какая-то особенность «чего-то» влияет на данное поведение.
              Попробуйте, для начала, просто переустановить библиотеку.

              Цитата:

              2. Кидаем датасет, добавляем колонки в грид, добавляем CellButtons. В первой у меня заполнен Glyph, Вторая DropDown, третья тоже Glyph но из ImageList. Вроде бы все хорошо, но как-то некрасиво.

              Можете описать конкретнее, как должны отрисовываться кнопки чтобы выглядеть красиво?

              Цитата:

              Делаем Uses XPMan. Теперь красиво, но, что стало с кнопками? Почему теперь не видно картинки на неактивных кнопках?

              Можете прислать ваши файлы формы (dfm+pas) на

              support@ehlib.com

              ?
              Будем разбираться.

              Цитата:

              Есть гриды с высотой строки больше стандартной. а CellButtons в таких строках имеют стандартную высоту. Выглядит это не очень. Хотелось бы иметь возможность менять высоту этих кнопок в соответствии с высотой строк или произвольно, а также размещать эти кнопки в ряд не только горизонтально, но и вертикально, если высота строки это позволяет.

              К сожалению в текущей версии ручная высота кнопок и вертикальное размещение не поддерживаются.

              _________________
              Best regards
              EhLib support Team

              Вернуться наверх

              Профиль  

              edward_1

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 24 ноя 2021, 07:46 

              Не в сети



              Зарегистрирован: 19 ноя 2021, 03:49
              Сообщений: 6

              В предыдущем посте я использовал Windows XP [Версия 5.1.2600], Delphi 7 Professional (Build 4.453), EhLib 10.1.022 Evaluation.
              Кнопки были некрасивые из-за отсутствия XPMan.
              Новый тест. Используем Windows 7 Максимальная, Service Pack 1 [Version 6.1.7601], Delphi 7 Professional (Build 4.453), EhLib 10.1.022 Evaluation.
              В качестве тестового приложения взял вашу демку, убрав лишнее (DBGridEh.CellButtons)
              Итак. Создаем новую колонку. Добавляем CellButton. Задаем свойство Glyph (загружаем туда Bitmap).
              Теперь играемся свойствами.
              DrawBackTime = edbtNeverEh

              Вложение:

              edbtNeverEh.jpg
              edbtNeverEh.jpg [ 19.66 KiB | Просмотров: 694 ]

              DrawBackTime = edbtAlwaysEh

              Вложение:

              edbtAlwaysEh.jpg
              edbtAlwaysEh.jpg [ 19.6 KiB | Просмотров: 694 ]

              В последнем случае наш битмап больше похож на маску, нежели на изображение. В старых версиях DBGridEh в EditButtons битмапы отображались корректно, их было хорошо видно:

              Вложение:

              oldEditBtn.jpg
              oldEditBtn.jpg [ 4.03 KiB | Просмотров: 694 ]

              Хочу заметить, на данном этапе теста значение свойства HorzPlacement может быть любым.
              Следующий баг. Вот теперь если HorzPlacement = ebhpInContentEh и мы попытаемся выставить у CellButton свойство Visible = False, получаем бесконечное предупреждение «Division by zero»

              Вложение:

              divbyzero.jpg
              divbyzero.jpg [ 11.41 KiB | Просмотров: 694 ]

              Ну и копирование — вставка грида вызывает ошибку, описанную в предыдущем посте.
              То есть замена компьютера на эту ошибку не повлияла.
              Тестовый проект во вложении.

              Вернуться наверх

              Профиль  

              edward_1

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 24 ноя 2021, 08:58 

              Не в сети



              Зарегистрирован: 19 ноя 2021, 03:49
              Сообщений: 6

              Установил EhLib 10.1.023 Evaluation version. Ничего не изменилось. Все замеченные баги на месте.

              Вернуться наверх

              Профиль  

              aush

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 24 ноя 2021, 09:17 

              Не в сети



              Зарегистрирован: 14 окт 2014, 11:19
              Сообщений: 62

              Оффтопик конечно, но в 2021 году стоит «закопать обоих стюардесс» (XP & Delphi7)

              Вернуться наверх

              Профиль  

              edward_1

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 24 ноя 2021, 09:43 

              Не в сети



              Зарегистрирован: 19 ноя 2021, 03:49
              Сообщений: 6

              aush писал(а):

              Оффтопик конечно, но в 2021 году стоит «закопать обоих стюардесс» (XP & Delphi7)

              Это когда делать нечего, можно и закопать. А когда это проект в D7, в котором 150+ юнитов и форм, выполняющий свои задачи на 100% — закапывать тут нечего. Это не касается XP.
              К слову, прежде чем отдавать релиз, приходится тестировать на совместимость в том числе и в XP. Так что тут вы не правы.

              Вернуться наверх

              Профиль  

              EhLibSupport

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 01 дек 2021, 14:51 

              Не в сети



              Зарегистрирован: 21 дек 2011, 18:48
              Сообщений: 1509

              Добрый день.


              Ошибку «Division by zero» исправили в сборке EhLib.VCL 10.1 Build 10.1.024


              Ошибку “с многочисленным сообщением «List index out of bounds (0)»” так воспроизвести и не удалось.

              Цитата:

              В последнем случае наш битмап больше похож на маску, нежели на изображение. В старых версиях DBGridEh в EditButtons битмапы отображались корректно, их было хорошо видно:

              Можете написать, в какой версии EditButton точно работали?
              Для отображения картинки в текущей версии можно установить EditButton. AutoFade = False или использовать картинки из ImageList в формате ColorDepth = cd32Bit

              _________________
              Best regards
              EhLib support Team

              Вернуться наверх

              Профиль  

              edward_1

              Заголовок сообщения: Re: List index out of bounds (0) и еще пара замечаний

              СообщениеДобавлено: 03 дек 2021, 05:32 

              Не в сети



              Зарегистрирован: 19 ноя 2021, 03:49
              Сообщений: 6

              EhLibSupport писал(а):

              Ошибку “с многочисленным сообщением «List index out of bounds (0)»” так воспроизвести и не удалось.

              Странно. При копировании — вставке грида мне наоборот, не удается избежать данной ошибки. Даже если грид пустой.

              edward_1 писал(а):

              Можете написать, в какой версии EditButton точно работали?

              В версии 5.2 кнопки отображались так:

              Вложение:

              oldEditBtn.jpg
              oldEditBtn.jpg [ 4.03 KiB | Просмотров: 596 ]

              edward_1 писал(а):

              Для отображения картинки в текущей версии можно установить EditButton. AutoFade = False

              Если установить EditButton. AutoFade = False, получаем изображение всех кнопок одинаковым, без учета активной/неактивной кнопок:

              Вложение:

              newEditBtn.jpg
              newEditBtn.jpg [ 25.22 KiB | Просмотров: 596 ]

              Если же использовать например PngImageList, то все нормально:

              Вложение:

              newEditBtn1.jpg
              newEditBtn1.jpg [ 19.6 KiB | Просмотров: 596 ]

              Выходит, добавив новые возможности отображения кнопок с использованием ImageList, старые методы поломали.

              Вернуться наверх

              Профиль  

            • Delphi как убрать сообщение об ошибке
            • Delphi webbrowser ошибка сценария
            • Delphi try except код ошибки
            • Delphi try except вывести ошибку
            • Delphi getlasterror текст ошибки