Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
ВнизМодули Найти похожие ветки
← →
ZyXel (2004-02-25 00:03) [0]Мастера помогите пожайлуста!!!!!!!
В моем приложение есть процедура:
procedure TForm1.Button2Click(Sender: TObject);
begin
obfile.Zapis__File;
end;
Взятая из созданного мною модуля:
procedure Cfile.Zapis__File;
begin
write(f,stringGrid1.cells[0,0]);
end;
В моем модуле я подключил через uses модуль Grids
и в классе объявил объект StringGrid1:TstringGrid
Все компилируется,но когда я пытаюсь считать с объекта StringGrid программа виснет.
Вообще объясните пожайлуста как сделать так чтобы созданный мною модуль работал с объектами приложения к которому я его потключаю.
← →
Defunct (2004-02-25 00:23) [1]Желательно, чтобы создаваемый Вами модуль не использовал напрямую переменные объявленные в других модулях.
PS: Что такое F?
Вы уверены, что назначили и открыли файл правильно?
Файловые переменные (Handle файла) представляет собой номер по которому операционная система выбирает существующую FCR (File Control Record) из списка FCR. Обращаясь к Handle со значением 0 (Console out) вы пытаетесь записать строку на консоль, отсюда и зависание.
Var F:TextFile
Procedure WriteFile;
Begin
AssignFile(F,"MyFile.txt");
ReWrite(F);
WriteLn(F,"test test test");
CloseFile(F)
End;
← →
Talan (2004-02-25 00:34) [2]Пробдема не в этом.
Проблема в том что в модуле процедура,а в проекте к которому подключен модуль ноходится объект StringGrid.
И процедура нодящаяся в модуле не хочет работать с ним!!!!!
← →
Palladin (2004-02-25 01:08) [3]Ну ты Янус. То один то другой...
Интересная ситуация. Значит два модуля. Процедура записи в одном записываемый объект в другом. А как ты сделал так что бы процедура записи знала что именно она записывает?
← →
Defunct (2004-02-25 01:08) [4]> И процедура нодящаяся в модуле не хочет работать с ним!!!!!
... и поэтому зависает программа?
Да компилятор бы ошибку выдал, если бы виноват был StringGrid1. В худщем случае - Access Violation но ни как не зависание.
← →
Defunct (2004-02-25 01:11) [5]Посмотрите на эту процедуру!
procedure Cfile.Zapis__File;
begin
write( f,stringGrid1.cells[0,0]);
end;
Проблема здесь только в файловой переменной F. Она определена, но файл ни где не был открыт.
← →
Talan (2004-02-25 10:47) [6]Файл я открываю другой кнопкой,а при записи вылетает сообщение
<<Access Violation>>
← →
TUser (2004-02-25 11:11) [7]А ты этому Stringgrid криэйт сделал?
← →
icWasya (2004-02-25 11:12) [8]тогда поподробнее про StringGrid1 - где создаётся, как используется, побольше кода
← →
Talan (2004-02-25 11:34) [9]Вот код проекта:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,unit2, Grids;
type
TForm1 = class(TForm)
Edit1: TEdit;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end;
var
Form1: TForm1;
OBFile:Cfile;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
assignFile(f,"c:\vit.xls") ;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
obfile:=cfile.Create(obfile);
messagebeep(1);
obfile.Sozd__File;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
obfile.Zapis__File;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
obfile.Zakr__File;
end;
end.
А от код модуля
unit Unit2;
interface
uses windows,SysUtils,Forms,Grids;
type
Cfile=class(Tform)
private
FName:string;
Fsostoyanie:byte;
Ffperem:char;
{ Edit1:Tedit;}
published
StringGrid1:TstringGrid;
property Name:string read FName write FName;
property Sostoyanie:byte read FSostoyanie write Fsostoyanie;
property fperem:char read Ffperem write Ffperem;
public
procedure Sozd__File;
procedure Zakr__File;
procedure Zapis__File;
end;
var
f:textfile;
implementation
procedure Cfile.Sozd__File;
begin
rewrite(f)
end;
procedure Cfile.Zakr__File;
begin
Closefile(f);
end;
procedure Cfile.Zapis__File;
begin
write(f,stringGrid1.cells[1,1]);
end;
end.
← →
ZyXel (2004-02-25 12:22) [10]Помогите пожайлуста!!!!!!!!!!!!!!!!!!
← →
Defunct (2004-02-25 12:33) [11];)
Да....
Это стадия...
1. StringGrid1 в Unit1 и StringGrid1 в Unit2 это абсолютно разные экземпляры.
2. Вы нигде не создали экземпляр класса CFile (Вы его объявили но не создали).
3. Переменная.. F LOL объявлена в одном модуле, а используется методами другого модуля.
4. Ну и CFile = class( TForm) - это нЕчто
Тут можно только посоветовать почитать классику по Delphi. Какой-нибудь учебник будет весьма кстати.
Приведу вам пример как должен быть оформлен второй модуль:
unit Unit2;
Interface
Uses Grids;
Type
TFileControl = class
Private
F : TextFile;
FName : String;
SG : TStringGrid;
Public
Constructor Create;
Destructor Destroy;
{
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c