Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.037 c
14-1085487647
VID
2004-05-25 16:20
2004.06.13
Что я не так делаю с этим VB ???


3-1085383599
avgur
2004-05-24 11:26
2004.06.13
очистка таблицы и счетчика


1-1086114084
Дана
2004-06-01 22:21
2004.06.13
Изменение размера bitmapa при resize формы


1-1086084362
init13
2004-06-01 14:06
2004.06.13
TDrawGrid


4-1083930798
Санёк
2004-05-07 15:53
2004.06.13
При переключении фокуса пропадает курсор мыши, как заставить Wind





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский