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

Вниз

Создание StringGrid в runtime   Найти похожие ветки 

 
calmterror   (2004-01-12 17:21) [0]

Люди, помогите с созданием StringGrid в runtime.
Все хорошо, пока не выставлю ему в Options опцию goEditing и не изменю что-то в нем. После этого Access violation при закрытии, чтоб я не делал.
Может кто-нибудь с этим сталкивался, помогите, в чем причина?


 
alex_***   (2004-01-12 17:23) [1]

как здесь принято отвечать, ошибка в строке 17 :))
как создаешь? и что изменишь?


 
Goida   (2004-01-12 17:44) [2]

А ты создаешь потом строки, в которые ты собираешься писать?


 
calmterror   (2004-01-12 18:45) [3]

Вот код. Казалось, что можеть быть проще?

var SG:TStringGrid;

procedure FormShow;
begin
SG:=TString.Create(Form);
SG.Parent:=Form;
SG.Options:=SG.Options-[goRangeSelect]+[goEditing];
end;

procedure FormClose;
begin
SG.Free;
end;

To Goida: Так вроде ж не надо? Кроме того с выключенным редактированием и присваиванием значений ячейкам из программы все работает как часы.


 
Плохиш_   (2004-01-12 19:12) [4]

>calmterror © (12.01.04 18:45) [3]

1. не Form, а self
2. Кто-такой TString?


 
calmterror   (2004-01-12 19:25) [5]

1. Вопрос не принципиальный, но даже если так ничего не меняется.
2. Описался конечно, не TString, а TStringGrid


 
Юрий Зотов   (2004-01-12 20:24) [6]

1. Перенесите создание из OnShow в OnCreate.
2. Поставьте в конструкторе не Form, а Self.
3. Уничтожение уберите совсем. Просто выкиньте.

Если после этого ошибка не исчезнет, то либо она где-то в другом месте, либо я - папа римский.


 
calmterror   (2004-01-12 20:46) [7]

Первое и второе в общем-то абсолютно ничего не решают, а вот третье как ни странно помогло =8(
Но вот хорошо ли это? Табличка можеть быть весьма не слабая и не одна.


 
YuRock   (2004-01-12 20:56) [8]

Вот код деструктора StringList"a:


destructor TStringGrid.Destroy;
function FreeItem(TheIndex: Integer; TheItem: Pointer): Integer; far;
begin
TObject(TheItem).Free;
Result := 0;
end;

begin
if FRows <> nil then
begin
TSparseList(FRows).ForAll(@FreeItem);
TSparseList(FRows).Free;
end;
if FCols <> nil then
begin
TSparseList(FCols).ForAll(@FreeItem);
TSparseList(FCols).Free;
end;
if FData <> nil then
begin
TSparseList(FData).ForAll(@FreeItem);
TSparseList(FData).Free;
end;
inherited Destroy;
end;


Посмотрев на него, можно предположить, что скорее всего неправильно добавляются строки и/или колонки


 
Stilgar   (2004-01-12 21:02) [9]

Если не верите что хорошо, сделайте так:
SG:=TString.Create(nil);
(с последующим ручным удалением).
Или так:
procedure FormClose;
begin
FreeAndNil(SG);
end;


 
calmterror   (2004-01-12 21:04) [10]

Вот тестовая программа. Я ничего не добавляю, ничего не удаляю. Попробуйте скомпильте, Acceess Violation на выходе+сообщение Control "" has no parent window.

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
public
end;

var
Form1: TForm1;
S:TStringGrid;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
S:=TStringGrid.Create(Self);
S.Parent:=Form1;
S.Options:=S.Options-[goRangeSelect]+[goEditing];
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
S.Free;
end;

end.


 
calmterror   (2004-01-12 21:08) [11]

Добавление - надо только что-то изменить в TStringGrid для нужного результата :)

С FreeAndNil - то же самое


 
YuRock   (2004-01-12 21:10) [12]

Попробуйте не писать S.Parent := Form1 - ведь это же и есть Self, который передается в Create. Может из-за этого что-то не то...


 
calmterror   (2004-01-12 21:21) [13]

Да Parentом по барабану совершенно что писать. Хоть Form, хоть какой компонент. Результат один и тот же.


 
Stilgar   (2004-01-12 21:24) [14]

Хе...
Ошибку не выдает, хотя по моим предположениям должен был. Приведите остальной код.


 
Юрий Зотов   (2004-01-12 22:00) [15]

Народ, о чем речь идет? Разве еще не все ясно?

> calmterror © (12.01.04 20:46) [7]

> Первое и второе в общем-то абсолютно ничего не решают
Очень даже решают. Во-первых, OnShow может выполняться хоть сто раз (при каждом Hide/Show) - и каждый раз Вы будете создавать таблицу? Во вторых, что такое у Вас означает Form - это неизвестно, а вот что такое Self - известно точно.

> а вот третье как ни странно помогло
А что тут странного? При уничтожении в OnClose так и должно быть. Вот если бы Вы написали уничтожение в OnDestroy, то все было бы нормально. Но в данном случае и этого не требуется - при указании в конструкторе Self все будет уничтожено правильно, вовремя и без Вашего участия.

> Но вот хорошо ли это? Табличка можеть быть весьма не слабая и
> не одна.
Открываем книжку или справку. Читаем про список Components и про то, что означает AOwner в конструкторе компонента и Self в обработчиках событий. А еще про то, что происходит при уничтожении любого компонента и про то, что форма - это тоже компонент.



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

Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
3-72634
Hyzhak
2003-12-24 19:33
2004.01.23
ADO и EInvalidOp , в чем связь???


1-72771
race1
2004-01-13 14:42
2004.01.23
published property


14-72944
iMad02
2003-12-30 19:49
2004.01.23
Необходимо написать базу на MS Access за вознаграждение.


14-72933
Nik
2003-12-31 20:43
2004.01.23
форматирование дисков больше 80 гигов


3-72628
Zemal
2003-12-26 13:21
2004.01.23
Проблема с подбором DBGrid а под .





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский