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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2013, 03:54   #11
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Теперь мне выдает ошибку.


Код:
unit Registr;

interface

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

type
  TFormRegistr = class(TForm)
    FIO: TEdit;
    Company: TEdit;
    Phone: TEdit;
    email: TEdit;
    ButtonRegistr: TButton;
    ButtonHelp: TButton;
    LabelFIO: TLabel;
    LabelCompany: TLabel;
    LabelPhone: TLabel;
    LabelEmail: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    procedure ButtonHelpClick(Sender: TObject);
    procedure ButtonRegistrClick(Sender: TObject);
    procedure PhoneKeyPress(Sender: TObject; var Key: Char);
    procedure FIOKeyPress(Sender: TObject; var Key: Char);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure emailKeyPress(Sender: TObject; var Key: Char);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormRegistr: TFormRegistr;
  ErrorMassege: string;

 // GetCurrentUserName: string ;
 const RegFile = 'F:\path\RegData.txt';
implementation

{$R *.dfm}

uses help, error;

function GetCurrentUserName: string;
 const
   cnMaxUserNameLen = 254;
 var
   sUserName: string;
   dwUserNameLen: DWORD;
 begin
   dwUserNameLen := cnMaxUserNameLen - 1;
   SetLength(sUserName, cnMaxUserNameLen);
   GetUserName(PChar(sUserName), dwUserNameLen);
   SetLength(sUserName, dwUserNameLen);
   Result := sUserName;
 end;

procedure TFormRegistr.FormActivate(Sender: TObject);
const
  Capacity = 10;
var
OpenDialog1: TOpenDialog;
  f : TextFile;
  StrBuff : String;
  Row, Pos1 : Integer;
  i, j : Integer;
begin
  if OpenDialog1.InitialDir = '' then begin
    OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  end;
  if not OpenDialog1.Execute then Exit;
  AssignFile(f, OpenDialog1.FileName);
  Reset(f);
  Row := 1;
  i := 0;
  while not Eof(f) do begin
    Readln(f, StrBuff);
    Pos1 := Pos(GetCurrentUserName, StrBuff);
    if Pos1 > 0 then begin

    end;
    Inc(Row);
  end;
  CloseFile(f);
end;

procedure TFormRegistr.ButtonRegistrClick(Sender: TObject);
var SaveTxt:TStringList;
 FIOUsr, CompanyUsr, PhoneUsr, EmailUsr, GetCurrentUserNameUsr:string;
 today : TDateTime;
 i : integer;
begin
SaveTxt:=TStringList.Create;
SaveTxt.LoadFromFile(RegFile);
today:=Now;
if (GetCurrentUserName <> '') and (FIO.Text <> '') and (Company.Text <> '') and (Phone.Text <> '') and (email.Text <> '') then
  begin
    GetCurrentUserNameUsr:=Trim(GetCurrentUserName);
    FIOUsr:=Trim(FIO.Text);
    CompanyUsr:=Trim(Company.Text);
    PhoneUsr:=Trim(Phone.Text);
    EmailUsr:=Trim(email.Text);
    SaveTxt.Add('"'+GetCurrentUserNameUsr+'"'+'#'+'"'+DateToStr(today)+'"'+'#'+'"'+TimeToStr(today)
+'"'+'#'+'"'+FIOUsr+'"'+'#'+'"'+CompanyUsr+'"'+'#'+'"'+'+'+PhoneUsr+'"'+'#'+'"'+EmailUsr+'"');
    SaveTxt.SaveToFile(RegFile);
    Application.Terminate;
  end
  else
  ErrorMassege:=('Заполните все поля!');
  FormError.ShowModal;
  end;

procedure TFormRegistr.emailKeyPress(Sender: TObject; var Key: Char);
const Symbols: set of Char=['1'..'9', 'a'..'z', 'A'..'Z', '0', '_', '.', '@', '-', #8];
begin
with (Sender as TEdit) do
  begin
    if (not(Key in Symbols))
       then Key:=#0;
  end;
end;

procedure TFormRegistr.FIOKeyPress(Sender: TObject; var Key: Char);
const Symbols: set of Char = ['1'..'9', '0', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '*', '®', '¯', 
'°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿','×', '÷', '←', '↑', '→', '↓', '↔', '♠', '♣', '♥', '♦', 
'"', '&', '<', '>', 'ˆ', '˜', '™', '•', '…', '′', '″', '‾', '⁄', '–', '—', '‘', '’', '‚', '“', '”', '„', '!', '@', '#', '$', '%', '*', '(', 
')', '-', '_', '=', '+', '№', ';', ':', '{', '}', '[', ']', '\', '|', '/'];
begin
with (Sender as TEdit) do
  begin
    if (Key in Symbols)
       then Key:=#0;
  end;
end;

procedure TFormRegistr.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end;

procedure TFormRegistr.PhoneKeyPress(Sender: TObject; var Key: Char);
const Symbols: set of Char=['1'..'9', '0', '(', ')', '-', #8];
begin
with (Sender as TEdit) do
  begin
    if (not(Key in Symbols))
       then Key:=#0;
  end;
end;

procedure TFormRegistr.ButtonHelpClick(Sender: TObject);
begin
  FormHelp.ShowModal;
end;

end.
Я еще понял что OpenDialog умеет работать с файлами, но ему их как-то надо прописать... А где - это темный лес.

PS И еще не понятна разница между OpenDialog и OpenDialog1 ?) Просто другое название? или оно имеет какую-то смысловую нагрузку?)

Последний раз редактировалось Stilet; 15.09.2013 в 09:59.
8tomat8 вне форума Ответить с цитированием
Старый 15.09.2013, 09:59   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Теперь мне выдает ошибку.
Значит пришла пора заняться отладкой жми F8-F7 и смотри на какой строке падает.
Мышкой наводи курсор на переменные, свойства и поля и следи какие в них значения.
Где-то стоит nil у свойства или объекта.
Цитата:
Я еще понял что OpenDialog умеет работать с файлами, но ему их как-то надо прописать
Что-то типа:
Код:
if OpenDialog.Execute then
 ShowMessage('Вы выбрали '+OpenDialog.FileName);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2013, 12:43   #13
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что-то типа:
Код:
if OpenDialog.Execute then
 ShowMessage('Вы выбрали '+OpenDialog.FileName);
Я все равно не понял как файл передается ему... Это отдельная процедура? Либо команда? Либо надо какой-то переменной путь присвоить?
8tomat8 вне форума Ответить с цитированием
Старый 15.09.2013, 13:28   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как файл передается ему
Метод Execute вызывает диалоговое окно выбора файлов. Путь выбранного файла помещается в свойство FileName после закрытия окна. Делает это сама винда (и немного класс Делфи). Читай хелп.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2013, 18:46   #15
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Метод Execute вызывает диалоговое окно выбора файлов. Путь выбранного файла помещается в свойство FileName после закрытия окна. Делает это сама винда (и немного класс Делфи). Читай хелп.
А возможно как-то задать путь и имя файла что бы пользователь об этом не знал?

Возможно в var задать значение переменной FileName?
8tomat8 вне форума Ответить с цитированием
Старый 15.09.2013, 18:52   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Если правильно понял вопрос, то да.
Пишите сразу AssignFile(f, 'C:\tmp\users.txt');, например.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.09.2013, 18:55   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
возможно как-то задать путь и имя файла что бы пользователь об этом не знал?
А зачем тогда диалог, если путь к файлу ты хочешь прописать в программе?
Если речь идет только о каталоге, который диалог должен открыть то его припиши в свойстве InitDir (или как оно там правильно зовется...)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2013, 21:48   #18
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
А зачем тогда диалог, если путь к файлу ты хочешь прописать в программе?
Если речь идет только о каталоге, который диалог должен открыть то его припиши в свойстве InitDir (или как оно там правильно зовется...)
Я понял где ошибка... Я сразу не допер что OpenDialog это открытие диалога xD
Мне надо что бы программа сама открывала один единственный файл и в нем делала все свои дела)

Цитата:
Если правильно понял вопрос, то да.
Пишите сразу AssignFile(f, 'C:\tmp\users.txt');, например.
Спасибо большое) Это и были те грабли по которым я разъяренно прыгал все это время)


Подскажите еще пожалуйста если не сложно. В следующем куске кода
Код:
begin
  AssignFile(f, Regfile);
  Reset(f);
  Row := 1;
  i := 0;
  while not Eof(f) do begin
    Readln(f, StrBuff);
    Pos1 := Pos(GetCurrentUserName, StrBuff);
    if Pos1 > 0 then begin
     showmessage('нашел');
    end else showmessage('не нашел');
    Inc(Row);
  end;
  CloseFile(f);
end;
Что означает переменная Pos1? и правильно ли мне выдает сообщения "Нашел" и "Не нашел"? а то постоянно говорит не нашел, хотя в файле не единоразово встречается имя моего пользователя (значение переменной GetCurrentUserName)
8tomat8 вне форума Ответить с цитированием
Старый 15.09.2013, 22:28   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что означает переменная Pos1?
Номер символа в строке StrBuff, с которого начинается подстрока из GetCurrentUserName. Функция pos() ищет подстроку в строке.
Почему хелп не читать желаешь? Силу дает он несметную. От темной стороны не спасут вопросы. К хелпу обрати сознание.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2013, 22:41   #20
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Номер символа в строке StrBuff, с которого начинается подстрока из GetCurrentUserName. Функция pos() ищет подстроку в строке.
Почему хелп не читать желаешь? Силу дает он несметную. От темной стороны не спасут вопросы. К хелпу обрати сознание.
Простите мастер. Темную силу ощущаю в себе я)
Та я поставил какую-то кривую прогу RED studio XE4 и в ней по нажатию f1 выскакивают ошибки, а теперь менять ничего не хочу, хочу только закончить))) Гугл частично спасает с примерами)

По делу. В работе функции разобрался, спасибо) Выкинул кучу мусора из процедуры. Но все равно мне говорит что "Не найдено"
Код:
procedure TFormRegistr.FormActivate(Sender: TObject);
var
  f : TextFile;
  StrBuff : String;
  Pos1 : Integer;
begin
  AssignFile(f, RegFile);
  Reset(f);
  while not Eof(f) do begin
    Readln(f, StrBuff);
    Pos1 := Pos(GetCurrentUserName, StrBuff);
    ShowMessage(StrBuff);
    if Pos1 > 0 then begin
     showmessage('нашел');
    end else showmessage('Не нашел');
  end;
  CloseFile(f);
end;
Хотя ShowMessage(StrBuff); выдает реальные строки из файла.
Вот содержимое файла. Он бы по любому хоть раз нашел если бы все было верно. (tomat это имя пользователя - значение переменной GetCurrentUserNameUsr на моем пользователе)
Код:
"tomat"
tomat
tomat
tomat#123#123#123#123
tomat
tomat#rtbtb#rtbrtb#+brtbrt#brtbrt
tomat#eb5yjeh#v5h5he5#+ve5h6#ec45he54
tomat#qc3f3#4v5hc4#+c45ch45#c3g4gc4
"tomat"#"14.09.2013"#"22:46:10"#"dq"#"asdasd"#"+123"#"1"
"tomat"#"15.09.2013"#"0:12:04"#"qsd"#"qwd"#"+12332112311"#"asf"
"tomat"#"15.09.2013"#"0:20:02"#"dfsd"#"sdfs"#"+2524"#"sdf"
_______________________________

РЕШИЛ! Нашел грабли)
Оказывается надо было пробелы поубирать из переменной перед поиском)))) Спасибо!)
Код:
procedure TFormRegistr.FormActivate(Sender: TObject);
var
  f : TextFile;
  StrBuff : String;
  Pos1 : Integer;
  GetCurrentUserNameUsr:string;
begin
 GetCurrentUserNameUsr:=Trim(GetCurrentUserName);
  AssignFile(f, RegFile);
  Reset(f);
  while not Eof(f) do begin
    Readln(f, StrBuff);
    Pos1 := Pos(GetCurrentUserNameUsr, StrBuff);
    ShowMessage(StrBuff);
    if Pos1 <> 0 then begin
     showmessage('нашел');
    end else showmessage('Не нашел');
  end;
  CloseFile(f);
end;

Последний раз редактировалось 8tomat8; 15.09.2013 в 22:47.
8tomat8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка диапазона на наличие значений в определенных ячейках caustic_ Microsoft Office Excel 6 25.12.2012 23:43
проверка на наличие символов в скобках ExploiT243 Помощь студентам 2 12.05.2012 12:17
Проверка полей js или jquery Rusl92 JavaScript, Ajax 1 17.06.2011 13:59
Проверка папки на наличие таблиц.Delphi. Студло Помощь студентам 0 27.03.2010 04:16
Проверка на отсутствие данных в БД Elena БД в Delphi 5 14.06.2007 16:10