Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EAccessViolation при обращение к объекту фрейма 
V
    Опции темы
seza
Дата 17.11.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.9.2011

Репутация: нет
Всего: нет



Господа помогите с проблемой!

Суть ее такова:
1) при выборе объекта в ComboBox, лежащем на фрейме, добавляется объект в AddressList (Имя фрейма,указатель на фрейм). AddressList находится в форме типа TDdeTable
Код

unit NewScalp;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls;

type
  Stok = record
    Name: string;           // Название бумаги
    ClassCode: string;      // Класс
    SecCode: string;        // Код
    Ask: Single;            // Спрос
    AskQ: Integer;          // Спрос по лучшей цене
    Bid: Single;            // Предложение
    BidQ: Integer;          // Предложение по лучшей цене
    Last: Single;           // Цена посл. сделки
    Lot: Word;              // Размер лота
    Step: Single;           // Шаг цены
  end;

type
  TfrNewScalp = class(TFrame)
    Panel: TPanel;
    CheckBox: TCheckBox;
    Bevel: TBevel;
    ComboBox: TComboBox;
    Label1: TLabel;
    SpeedButton: TSpeedButton;
    ComboBox2: TComboBox;
    Label2: TLabel;
    Bevel1: TBevel;
    Edit1: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Edit2: TEdit;
    Label5: TLabel;
    Edit3: TEdit;
    ComboBox3: TComboBox;
    UpDown1: TUpDown;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    UpDown2: TUpDown;
    ComboBox4: TComboBox;
    Label8: TLabel;
    procedure FrameResize(Sender: TObject);
    procedure ComboBoxDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure ComboBoxSelect(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Calculation(var DataTab: array of Stok);
    { Public declarations }
  end;

implementation

uses
  Main, NewDdeTable;

{$R *.dfm}

procedure TfrNewScalp.Calculation(var DataTab: array of Stok);
var i,k: Integer;
begin
  For i:=0 to Length(DataTab)-1 do
    k:=k+DataTab[i].AskQ;
  Edit1.Text:=IntToStr(k);
end;

. . . . .

procedure TfrNewScalp.ComboBoxSelect(Sender: TObject);
var i,j,k: Integer;
    D: TDdeTable;
begin
  i:=frMain.StokStrings.IndexOf(ComboBox.Items[ComboBox.ItemIndex]);
  D:=TDdeTable(frMain.StokList.Items[i]);
  D.AddressList.AddObject(Self.Name,@Self);
end;


Код

unit NewDdeTable;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Buttons, StdCtrls,  Math, DdeExlUnt;

type
  TDdeTable = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    ListValue: TStrings;
    AddressList: TStringList;
    procedure OnClickButton(Sender: TObject);
    procedure OnUpdate(Topic: string; NewCells: TVariantTable; NewAddr: TRect);
    procedure Clear;
    { Public declarations }
  end;

var
  DdeTable: TDdeTable;

implementation

uses Main, NewScalp;

var btn: TSpeedButton;      
    DataTab: array of Stok;
    k,l,m,n,o,p,q,r,s,t: Integer;

{$R *.dfm}

procedure TDdeTable.OnClickButton(Sender: TObject);
var h: Integer;
begin
  h:=TSpeedButton(Sender).Tag;
  if IsWindowVisible(h) then
    ShowWindow(h,SW_HIDE)
  else
    ShowWindow(h,SW_SHOW);
end;

procedure TDdeTable.OnUpdate(Topic: string; NewCells: TVariantTable;
  NewAddr: TRect);
var
  i, j: integer;
begin
  
. . . . .
{Здесь формируется массив DataTab}
. . . . .

. . . . .

  If AddressList.Count > 0 then                                         
    for i:=0 to AddressList.Count-1 do                                                 // перебираются все объекты в AddressList 
    begin
      TfrNewScalp(AddressList.Objects[i]).Calculation(DataTab);         // и в процедуры каждого объекта отправляется переменная DataTab
    end;
end;


2) из TDdeTable.OnUpdate массив DataTab передается во все объекты из AddressList.
Все работает замечательно. Проблема возникает при попытке вывода в Edit1 на фрейме. Без этой строки ошибки нет.
В чем же загвоздка? smile 
PM MAIL   Вверх
kami
Дата 17.11.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(seza @  17.11.2011,  13:37 Найти цитируемый пост)
D.AddressList.AddObject(Self.Name,@Self);

это получается "сохранить указатель на указатель). А нужно
Код

D.AddressList.AddObject(Self.Name,Self);


PM MAIL WWW   Вверх
seza
Дата 17.11.2011, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.9.2011

Репутация: нет
Всего: нет



Цитата(kami @ 17.11.2011,  21:29)
Цитата(seza @  17.11.2011,  13:37 Найти цитируемый пост)
D.AddressList.AddObject(Self.Name,@Self);

это получается "сохранить указатель на указатель). А нужно
Код

D.AddressList.AddObject(Self.Name,Self);

Шикарно..
Спасибо огромное, все работает!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.