Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 11:34   #1
FantomasRUS
 
Регистрация: 29.04.2010
Сообщений: 8
Восклицание Переключения между Edit-ами???

Подскажите пожалуйста начинающему Delphi-сту, почему у меня эта процедура вызывает ошибку компиляции. Если я описываю в процедуре Edit1,Edit2,Edit3: TEdit, то тогда программа работает вообще не правильно, так как в функцию EditLoad идёт корявое значение Edita. Вообще мне нужно было написать прогу, что бы она по очереди считывала из разных Editов и записала в фаил. Подскажите, в чём у меня ошбка???



unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
F: File;
FileName: string;
Sek: Integer;


implementation

{$R *.dfm}

function LoadEdit(var F: File; Edit: TEdit;var Sek: Integer): Integer;
var
S: Char;
I: Integer;
begin
Result:=0;
S:=#13;
Reset(F,1);
Seek(F,Sek);
for I:=1 to Length(Edit.Text) do
begin //
BlockWrite(F,Edit.Text[I],1); //
end;
BlockWrite(F,S,1);
Result:=I;
CloseFile(F); //
end;

procedure VseEdit(); // Это процедура не хочет работать!!!!
var
A,B: Integer;
begin
A:=0;

for B:=1 to 1 do //
begin
A:=A + LoadEdit(F,Edit1,A);
A:=A + LoadEdit(F,Edit2,A);
A:=A + LoadEdit(F,Edit3,A);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FileName:='Пример.txt';
Edit1.Text:= '';
Edit2.Text:= '';
Edit3.Text:= '';

FileName:='Пример.txt'; //////////
AssignFile(F,FileName); //
if not FileExists(FileName) then // Пример проверки файла на существование,
begin // если его не то его создание
ShowMessage(FileName +' не существует'); //
Rewrite(F,1); //
end; //
//else //
// ShowMessage(FileName+' существует'); ////////////
Reset(F,1);


end;

procedure TForm1.Button1Click(Sender: TObject);
var
{ A,B: Integer;
begin
A:=0;

for B:=1 to 1 do //
begin
A:=A + LoadEdit(F,Edit1,A);
A:=A + LoadEdit(F,Edit2,A);
A:=A + LoadEdit(F,Edit3,A);
end;}
begin
VseEdit;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Erase(F);
end;

end.
FantomasRUS вне форума Ответить с цитированием
Старый 29.04.2010, 12:00   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
.....
private
 procedure VseEdit(); 
   { Private declarations }
.......
Код:
procedure TForm1.VseEdit();
vovk вне форума Ответить с цитированием
Старый 29.04.2010, 13:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
procedure TForm1.VseEdit();
ну, или процедуру оставить как есть (не делать её методом класса, но тогда edit'ы надо передавать с указанием формы, где они расположены:
Код:
A:=A + LoadEdit(F,Form1.Edit1,A);
A:=A + LoadEdit(F,Form1.Edit2,A);
A:=A + LoadEdit(F,Form1.Edit3,A);
p.s. в реализацию функции LoadEdit мне даже заглядывать страшно.. ;(

p.p.s. FantomasRUS, для оформления кода обязательно используйте тег [СODE] (кнопочка с # ("решёточкой"))


_______________________________
ДОБАВЛЕНО
Цитата:
p.s. в реализацию функции LoadEdit мне даже заглядывать страшно.. ;(
как минимум вместо этого:
Цитата:
Код:
for I:=1 to Length(Edit.Text) do
begin //
BlockWrite(F,Edit.Text[i],1); //
end;
рекомендую
Код:
BlockWrite(F,Edit.Text[1],Length(Edit.Text));

Последний раз редактировалось Serge_Bliznykov; 29.04.2010 в 13:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.04.2010, 13:49   #4
FantomasRUS
 
Регистрация: 29.04.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, или процедуру оставить как есть (не делать её методом класса, но тогда edit'ы надо передавать с указанием формы, где они расположены:
Код:
A:=A + LoadEdit(F,Form1.Edit1,A);
A:=A + LoadEdit(F,Form1.Edit2,A);
A:=A + LoadEdit(F,Form1.Edit3,A);
p.s. в реализацию функции LoadEdit мне даже заглядывать страшно.. ;(

p.p.s. FantomasRUS, для оформления кода обязательно используйте тег [СODE] (кнопочка с # ("решёточкой"))


_______________________________
ДОБАВЛЕНО

как минимум вместо этого:рекомендую
Код:
BlockWrite(F,Edit.Text[1],Length(Edit.Text));
Спасибо большое!!! Респект за оперативность. Просто иногда сталкиваюсь с трудностями и не могу их ни как решить
FantomasRUS вне форума Ответить с цитированием
Старый 30.04.2010, 13:27   #5
FantomasRUS
 
Регистрация: 29.04.2010
Сообщений: 8
По умолчанию

А как тогда мне считать 2 байта со значением #13#10?
Код:
procedure ClearLine(Line: Integer);
  var S: string;
      B: Integer;
  begin
  B:= 0;
  Reset(F,2);
  while BlockRead(F,S,2)<>#13#10 do
  Inc(B);
  end;
Вообще хочу реализовать функцию , или процедуру которая переходит на заданную строку и стирает её.
FantomasRUS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для быстрого переключения аудиоустройств AnKor94 Общие вопросы Delphi 2 18.03.2010 19:27
Частота переключения asm-режима Alex Cones Софт 13 10.03.2010 10:30
Обмен данными между компонентом Edit и БД Fantom БД в Delphi 6 11.09.2008 11:52
Мини-утилита для переключения раскладки SublimeYe Свободное общение 4 03.07.2008 22:29