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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 03:22   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Не получается создать .asm файл

Здравствуйте, такая проблема, по нажатии кнопки Tbutton должна заработать программа, которая из Trichedit берет все данные, и сохраняет в файл .asm имя которого задано в Tedit, сам .asm файл создается, но это просто файл без имени, исправьте ошибку в коде

Код:
var
  Form1: TForm1;
  fileprojekt:string='';
  i:byte;

implementation

{$R *.dfm}

procedure Tform1.saved;
begin
if edit1.readonly=false then
 begin
   for i:=0 to Length(Edit1.Text) do
    if Edit1.Text[i]='.' then
     begin
     Edit1.text:=copy(Edit1.Text,1,i-1);
     fileprojekt:=Edit1.Text;
     end;
     fileprojekt:=fileprojekt+'.asm';
     Edit1.ReadOnly:=True;
     Edit1.visible:=false;
     exit;
 end;
RichEdit1.lines.SaveToFile(ExtractFilePath(ParamStr(0))+fileprojekt);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
 if Edit1.text<>'' then Saved else
 begin
 ShowMessage('Откройте или сохраните проект!!');
 Edit1.Clear;
 end;
end;
З.Ы. Нужно сохранить файл именно в папке с исполняемым модулем программы
from dark to light)

Последний раз редактировалось Алексей_2012; 24.02.2013 в 03:33.
Алексей_2012 вне форума Ответить с цитированием
Старый 24.02.2013, 11:52   #2
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Доброе Время суток!
Вот всё нормально сохраняет!
Код:
procedure Tform1.saved;
var
i:integer;
fileprojekt:String;
begin
if edit1.readonly=false then
 begin
   for i:=0 to Length(Edit1.Text) do
    if Edit1.Text[i]='.' then
     begin
     Edit1.text:=copy(Edit1.Text,1,i-1);
  end;
     fileprojekt:=Edit1.Text;
     fileprojekt:=fileprojekt+'.asm';
     RichEdit1.lines.SaveToFile(ExtractFilePath(ParamStr(0))+fileprojekt);
     Edit1.ReadOnly:=True;
     Edit1.visible:=false;
     exit;

 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if Edit1.text<>'' then
 Saved
 else
 begin
 ShowMessage('Îòêðîéòå èëè ñîõðàíèòå ïðîåêò!!');
 Edit1.Clear;
end;
end;
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 24.02.2013, 17:58   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо вам большое, но есть и смысл в оптимизации) а глобальные переменные не просто так использовал, в общем решил до такого упростить, если выполняется один оператор, то структурированные операторы между ними можно не вставлять, в общем вот что получилось:
Код:
procedure Tform1.saved;
begin
if edit1.readonly=false then
 begin
   for i:=0 to Length(Edit1.Text) do
    if Edit1.Text[i]='.' then
       Edit1.text:=copy(Edit1.Text,1,i-1);
     fileprojekt:=Edit1.Text;
     fileprojekt:=fileprojekt+'.asm';
     Edit1.ReadOnly:=True;
     Edit1.visible:=false;
 end;
 RichEdit1.lines.SaveToFile(ExtractFilePath(ParamStr(0))+fileprojekt);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
 if Edit1.text<>'' then
 Saved
 else
 ShowMessage('Откройте или сохраните проект!!');
end;

Код рабочий, но мне нужно добавить проверку на: стоит ли число первым в названии, если да, то вывод сообщения и выход, затем проверка на наличиствование русских букв, сейчас сам попытаюсь, если что-то не выйдет, то код кину
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.02.2013, 18:01   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну, логика здесь явно неоднозначная..
зачем, например, вот этот цикл:
Цитата:
Код:
for i:=0 to Length(Edit1.Text) do
    if Edit1.Text[i]='.' then
     begin
     Edit1.text:=copy(Edit1.Text,1,i-1);
     fileprojekt:=Edit1.Text;
     end;
????!!!

должно ли что-нибудь сохраняться, если edit1.readonly=false ?!

Что должно происходить, если в edit1.Text вместо нормального имени какой-нибудь мусор (начиная от пробела и заканчивая слешами или двоеточиями)?
и т.д. и т.п.


короче, резюмируя, ИМХО, код ужасный, логика запутанная, соответственно, работа данного кода неоднозначная и не надёжная...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.02.2013, 18:43   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот выложил код, проверяет на наличиствование числа в качестве первого символа, и не допускает русских букв, проверьте на работоспособность

Код:
procedure Tform1.saved;
begin
Edit1.Text:=Trim(Edit1.Text);
if edit1.readonly=false then
 begin
  if (Edit1.Text[1] in ['0'..'9']) then
  begin
       ShowMessage('Имя файла не может начинаться с цифр!');
       exit
  end
  else
  begin
   for i:=0 to Length(Edit1.Text) do
     if (Edit1.Text[i] in ['А'..'Я','а'..'я']) then
     begin
       ShowMessage('Имя файла должно содержать только Английские символы!!');
       Exit;
     end;
   for i:=0 to Length(Edit1.Text) do
     begin
      if Edit1.Text[i]='.' then
       Edit1.text:=copy(Edit1.Text,1,i-1);
     fileprojekt:=Edit1.Text;
     fileprojekt:=fileprojekt+'.asm';
     Edit1.ReadOnly:=True;
     Edit1.visible:=false;
     end;
 end;
end;
 RichEdit1.lines.SaveToFile(ExtractFilePath(ParamStr(0))+fileprojekt);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
 if trim(Edit1.text)<>'' then
 Saved
 else
 ShowMessage('Откройте или сохраните проект!!');
end;
Цитата:
зачем, например, вот этот цикл
нужен для поиска точки, ну если в имени укажут расширение, то оно удаляется
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.02.2013, 18:54   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

И еще, мне нужно как то отловить малейшее изменение текста в TrichEdit, если изменение есть, то подсветить его красным например, подсветить то я знаю как, а что прописывать в Events'e KeyPress? как описать такое условие: если нажата символьная клавиша или backspase, то подсвечиваем красным
from dark to light)

Последний раз редактировалось Алексей_2012; 24.02.2013 в 18:56.
Алексей_2012 вне форума Ответить с цитированием
Старый 24.02.2013, 19:05   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, вы всё так же, на своей волне - пытаетесь решить какую-то свою задачу, явно своеобразную.. Вот только мы её не знаем, видим только результат - ваш ужасный код...

во-вторых, Вы меня плохо поняли, я же не говорил, что имя файла не может начинаться с цифры или содержать русские буквы (да ради Бога, Windows уже давно позволяет обращаться с файлами с подобными именами). Вы попробуйте в свой Edit1 забить просто пару пробелов и попытайтесь сохранить файл. Или двоеточие (':') в Edit1 занесите, расскажите, как результат сохранения...

в-третьих, Вам же волкогрыз показал Ваш главный косяк, когда Вы в цикле при каждой точке присваиваете новое имя и изменяете аттрибуты! (пометил красным) Это, скорее всего НЕВЕРНО ....
Цитата:
Код:
   for i:=0 to Length(Edit1.Text) do
     begin
      if Edit1.Text[i]='.' then
       Edit1.text:=copy(Edit1.Text,1,i-1);
     fileprojekt:=Edit1.Text;
     fileprojekt:=fileprojekt+'.asm';
     Edit1.ReadOnly:=True;
     Edit1.visible:=false;
     end;
Что Вы вообще добиваетесь таким кодом?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.02.2013, 19:21   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ах, да, спасибо, исправил, пробелы то программа выкинет, которые спереди, а другой мусор типа :, или пробелов в середине-нет, вот мой немного исправленный код, процедуру и впрямь зря сделал

Код:
var
  Form1: TForm1;
  fileprojekt:string='';
  tmpstr:string;
  i:byte;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
 Edit1.Text:=Trim(Edit1.Text);
 if Edit1.text<>'' then
 begin
 TmpStr := Copy(Edit1.Text, 2, Length(Edit1.Text) - 1);
 Edit1.Text := AnsiUpperCase(Edit1.Text[1]) + AnsiLowerCase(TmpStr);
 if edit1.readonly=false then
 begin
  if (Edit1.Text[1] in ['0'..'9']) then
  begin
       ShowMessage('Èìÿ ôàéëà íå ìîæåò íà÷èíàòüñÿ ñ öèôð!');
       exit;
  end
  else
  begin
   for i:=0 to Length(Edit1.Text) do
     if (Edit1.Text[i] in ['À'..'ß','à'..'ÿ']) then
     begin
       ShowMessage('Èìÿ ôàéëà äîëæíî ñîäåðæàòü òîëüêî Àíãëèéñêèå ñèìâîëû!!');
       Exit;
     end;
   for i:=0 to Length(Edit1.Text) do
     begin
      if Edit1.Text[i]='.' then
       Edit1.text:=copy(Edit1.Text,1,i-1);
     end;
  end;
 fileprojekt:=Edit1.Text;
 fileprojekt:=fileprojekt+'.asm';
 Edit1.ReadOnly:=True;
 Edit1.visible:=false;
 ShowMessage('Âàøå èìÿ ïðîåêòà: '+fileprojekt);
 end;
 Form1.caption:=fileprojekt;
 RichEdit1.lines.SaveToFile(ExtractFilePath(ParamStr(0))+fileprojekt);
 end
 else
 ShowMessage('Откройте или сохраните файл проекта!!');
end;

А вот вторая процедура, уже на стадии разработки дала сбой, в тот же едит заносится название сохраненного файла, этот файл ищется, если не найден, то выдается сообщение, файл есть, но программа его не нашла почему-то.

Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=Trim(Edit1.Text);
TmpStr := Copy(Edit1.Text, 2, Length(Edit1.Text) - 1);
Edit1.Text := AnsiUpperCase(Edit1.Text[1]) + AnsiLowerCase(TmpStr);
 if Fileexists(ExtractFilePath(ParamStr(0))+edit1.text) then
 begin
{доделаю после решения проблемы}
 end
 else
 ShowMessage('Файл не найден!');
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 26.02.2013, 00:20   #9
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Доброе время суток!

Давайте немножечко разберём ваш код

Код:
if Fileexists(ExtractFilePath(ParamStr(0))+edit1.text) then //этот файл ищется,
 begin
{доделаю после решения проблемы} // если не найден, то выдается сообщение, файл есть :)
 end
 else
 ShowMessage('Файл не найден!');
end;
Так я не сторонник хаить чужую работу или поучать там(Сам иногда такого понапишу, сутра смотрю и аж плохо становится )
Но тут ради просвещения хочется узнать, гдеш всё таки сообщение делось?
<< {доделаю после решения проблемы} вопрос как и когда? )) если не найден, то выдается сообщение, файл есть>> Это высший Уровень я ещё до этого не дошёл, навыков не хватает, да и не столь силён в программирование
Но могу обрадовать, я Час читал и пытался решить вашу проблему, Но у меня не чего не вышло! ))
Что же вам тот человек такого сделал? я такое решение только лучшему другу написал! чтоб он меня долго помнил и так забыть не смог
Я тоже люблю пивка попить но Ждать сообщение от программы если его туда не писал долго не буду, часик два подожду и напишу
Не надо торопится, а то опытный образец программы выйдет не очень скоро
у меня проходит проверку на ура.
Код:
if Fileexists(ExtractFilePath(ParamStr(0))+edit1.text) then
begin
ShowMessage('Файл найден!'); //можно и местами поменять это тогда решение вашей проблемы ))))
end
else
ShowMessage('Файл не найден!');
end;
Насчёт переменных, я для себя писал, не принципиально я их и сделал локальными
Без обид!
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Volkogriz; 26.02.2013 в 00:57.
Volkogriz вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С#: Не получается создать процесс mzelenyy Общие вопросы .NET 2 20.09.2013 00:19
Ребят нужно создать bat файл. не получается... sasapot Помощь студентам 0 14.01.2011 18:24
В С# не получается создать процесс mzelenyy Общие вопросы C/C++ 1 03.08.2010 22:11
Не получается создать цикл SStone Microsoft Office Excel 4 08.09.2009 20:29
Не получается создать шейдер AngelOfDeath Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 31.07.2009 17:57