Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

access violation и Abstract error для чайников   Найти похожие ветки 

 
Maestro   (2004-06-02 08:39) [0]

Всем привет.
пишу прогу для кафе:
на сенсорном экране динамически созданые панели изображающие столики нажимаешь на столик попадаешь в меню "категорий блюд"
и делее нажав на категорию попадаешь в "список блюдей"
панели с названиями категорий блюд и панели с самими блюдами
тоже создаются динамически так как все это меню лежит в базе и может ежедневно меняться
теперь трабла
при нажатии на "стол" выполняется процедура выборки категорий блюд из базы и согласно их количеству в два ряда создает разноцветные панели с названием категории блюда
процедура выполняется без проблем НО ПРИ ВЫХОДЕ ИЗ НЕЕ
(в пошаговом режиме курсор стоит на последнем End; в процедуре)
нажимешь F8 и получаешь Access violation а в ряде случаев
просто Abstract error (я не смог отследить в каких похоже в случайных)
помогите кто может!!
Уже все глаза сломал криминала никакого не вижу...
причем все очень страно иногда процедура срабатывает без ошибки
З.Ы. прога писалась сначала в delphi 6 потом я ее в семерку перетащил но ошибку выдает и втой версии и в другой


 
Кщд ©   (2004-06-02 09:05) [1]

либо код процедуры, либо ваше меню не нравится системе.
у вас какая?
у меня - 2000 Prof - жрет всё.
как свинья.


 
Maestro   (2004-06-02 09:31) [2]

кажется я понял
я видимо я коряво удаляю компоненты
for i:=ComponentCount-1 downto 0  do
     if components[i] is Tpanel and (pos("PanelName_kat",TPanel(components[i]).name)<>0)then
        TPanel(components[i]).free;
компоненты прекрасно удаляются
но заремил этот код ошибка появляться перестала
ну и естественно панели перестали удаляться
может кто подскажет более правильный способ удаления компонентов


 
Rutven ©   (2004-06-02 10:13) [3]

Перед удалением компонента, отцепи его от родителя (Parent := nil)


 
ZHK ©   (2004-06-02 10:14) [4]

А RemoveComponent тоже не помогает?


 
pasha_golub ©   (2004-06-02 10:15) [5]

Вопрос еще более глубокий. На кой хрен плодить кучу компонентов?


 
Maestro   (2004-06-02 13:28) [6]

нет парни не помогает
ошибка вываливается в случайный момент(т.е. может вывалиться а может нет 50 на 50)
после отработки процедуры OnClick динамически созданной панели
причем если циклы удаления компонентов поставить до создания новых то ошибку выдает всегда а если после, как в данных примерах, то 50 на 50 работает
привожу код:
 private
    procedure StolPanelClicked(Sender: TObject);
    procedure PanelNameKatClicked(Sender: TObject);
   { Private declarations }
 public
   procedure CreatePanelName_kat(Name_b,cap_b:String;m_top,m_left,clr:Integer);
   procedure CreateStolPanel(Name_b,cap_b:String;m_top,m_left,m_size:Integer);
   { Public declarations }
 end;
1. Создание стола
procedure TForm1.CreateStolPanel;
var pnl:TPanel;
begin
    pnl := TPanel.Create(Form1);
    with pnl do begin
         Parent := Self;
         OnClick := StolPanelClicked;
         name:=Name_b;
         top:=m_top;
         Left:=m_left;
         Width:=m_size;
         Height:=m_size;
         Cursor:=crHandPoint;
         Font.size:=14;
         Font.Style:=[fsBold];
         Caption:=cap_b;
         Visible := true;
    End;
end;
procedure TForm1.StolPanelClicked;
var pnl:TPanel;
   i,k,l:Integer;

begin
 With Query1 do begin
   Active:=False;
   SQL.Clear;
   SQL.Add("select name_kat,color from ""+Path_DBF+"spr_menu.dbf"  group by name_kat,color order By Name_kat");
   Active:=True;

   i:=Panel4.top+20;
   l:=Panel4.Left+20;
   while not eof do begin
       CreatePanelName_kat("PanelName_kat"+IntToStr(RecNo),FieldByname("name_Kat").AsString,i,l,FieldByname("color").AsInteger) ;
       i:=i+50;
       if Recno=8 Then begin
         l:=l+300;
         i:=Panel4.top+20;
       end;
       Next;
   end;
 End;
 level:=1;
end;{вот здесь показывает ошибку}
2. создание меню категорий блюд
procedure TForm1.CreatePanelName_kat;
var pnl : TPanel;
   lbl : TLabel;
Begin
      pnl := TPanel.Create(Form1);
    with pnl do begin
         Parent := Self;
         OnClick := PanelNameKatClicked;
         Caption:=cap_b;
         name:=Name_b;
         top:=m_top;
         Left:=m_left;
         Width:=200;
         Height:=40;
         Cursor:=crHandPoint;
         Color:=clr;
         Caption:=cap_b;
         Visible := true;
    End;
end;
procedure TForm1.PanelNameKatClicked;
var pnl:TPanel;
 m_name_kat:String;
 i,k1,k2,l,kv,kg:Integer;
begin
   level:=2;
   m_name_kat:=TPanel(Sender).Caption;
 With Query1 do begin
   Active:=False;
   SQL.Clear;
   SQL.Add("select * from ""+Path_DBF+"spr_menu.dbf" where name_kat=""+m_name_kat+"" order By Name_blud");
   Active:=True;
   Kg:=4;
   kv:= (RecordCount div 3)+1;
   First;
   i:=Panel4.Top+10;l:=Panel4.Left+10;
   k1:=0;
   k2:=0;
   While not Query1.Eof  do begin
     CreateButton("m_butt"+IntToStr(k1)+IntToStr(k2),FieldByName("name_blud").AsString,i,l,FieldByName("Color").AsInteger);
     k1:=k1+1;
     l:=l+160;
     if k1=kg Then begin
       i:=i+50;
       l:=Panel4.Left+10;
       k1:=0;
       k2:=k2+1;
     End;
     Query1.Next;
   End;

 End;
 for i:=ComponentCount-1 downto 0  do
     if components[i] is Tpanel and (pos("PanelName_kat",TPanel(components[i]).name)<>0)then begin
        TPanel(components[i]).Parent:=nil;
        TPanel(components[i]).free;
     end;
end;


 
Anatoly Podgoretsky ©   (2004-06-02 13:36) [7]

Криминала два

1. неверные указатели
2. обращение к абстрактным методам

код приведен большой, но недостаточное количества данных для анализа, еще большее количество терра инкогнито осталось во вне.


 
Maestro   (2004-06-02 13:41) [8]

где неверные указатели?
и какие методы являются абстрактными?
не забывайте я чайник :-))


 
Anatoly Podgoretsky ©   (2004-06-02 15:09) [9]

pnl, Name_b, m_top, m_left, m_size, cap_b, Query1, Panel4, clr, m_name_kat,

Вот для начало список по которуму нет ясности, что это и в каком состоянии. Плюс добавим то что здесь не приведено.


 
jack128 ©   (2004-06-02 15:12) [10]


> а в ряде случаев
> просто Abstract error
варнинги за надобностью отключаем, я так понимаю?? Включи обратно и увидешь где ошибка..


 
MetalFan ©   (2004-06-02 15:13) [11]


> for i:=ComponentCount-1 downto 0  do
>      if components[i] is Tpanel and (pos("PanelName_kat",TPanel(components[i]).name)<>0)then
> begin
>         TPanel(components[i]).Parent:=nil;
>         TPanel(components[i]).free;
>      end;

как то мне не нравится, что в обработчике клика по панели она может и убиться...


 
pasha_golub ©   (2004-06-02 15:21) [12]

Повторюсь, по моему скромному мнению, создание тучи компонентов здесь ваапще не нужно. Вывод: переписать все нафиг.


 
Maestro   (2004-06-02 15:31) [13]

для pasha_golub
каким образом тогда отображать на экране нужное меню
если количество категорий и блюд в меню на день ежедневно меняется?
MetalFan
может и в этом проблема что панель сама себя убивает
(хотя я так не думаю)
моет сделать чтобы при нажатии нужная панель подсвечивалась
а кнопка далее  перелистывала страницу
щас попробуем


 
jack128 ©   (2004-06-02 17:42) [14]


> каким образом тогда отображать на экране нужное меню
> если количество категорий и блюд в меню на день ежедневно
> меняется?
Один DbGrid



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
6-1082816945
Yegorchic
2004-04-24 18:29
2004.06.13
Доступ к файлам по FTP...


3-1085395105
Alex_xxx
2004-05-24 14:38
2004.06.13
ADO, драйвер по умолчанию


1-1086160237
snake1977
2004-06-02 11:10
2004.06.13
Переустановка системы


14-1085377597
SammIk
2004-05-24 09:46
2004.06.13
Есть ли у кого в папке WINNT фаилик pspv.exe?


9-1060058083
TButton
2003-08-05 08:34
2004.06.13
DX3D