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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2009, 20:05   #1
Che Burashka
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 12
Вопрос Как связать условие case с чекбоксами

Вот есть такая конструкция
Код:
procedure TMainForm.GenButtonClick(Sender: TObject);
const
CLow='abcdefghijklmnopqrstuvwxyz';
CUp='ABCDEFGHJKLMNOPQRSTUVWXYZ';  
CDigit='0123456789';

var i,x:integer;
    L_Pass:integer;
    pass:string;
begin
 L_Pass:=StrToInt(LeightPass.Text);
pass:='';
randomize;
for i:=1 to L_Pass do                             
  begin
  x:=random(3)+1;
  case x of
       1: pass:=pass+CLow[random(length(CLow))+1];
       2: pass:=pass+CUp[random(length(CUp))+1];
       3: pass:=pass+CDigit[random(length(CDigit))+1];

       end;
  end;
PassString.Text:=pass;

end;
и есть форма с CheckBox'aми(см. вложение) помогите пожалуйста связать строки в case и боксы.
Изображения
Тип файла: jpg sfsdf.JPG (18.1 Кб, 67 просмотров)
Che Burashka вне форума Ответить с цитированием
Старый 30.12.2009, 21:46   #2
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Тебе надо ещё одна переменная типа срока, которая будет составляться из тех трёх констант: добавляешь low если отмечен соответствующий чекбокс и т.д. А рандом делай из длины всей строки.

Последний раз редактировалось mihali4; 31.12.2009 в 00:51.
Altera вне форума Ответить с цитированием
Старый 30.12.2009, 22:18   #3
Che Burashka
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 12
По умолчанию

Altera, а можешь подробно расписать как это сделать, ато я уже много форумов прорысачил , и везде пусто

Последний раз редактировалось mihali4; 31.12.2009 в 19:33.
Che Burashka вне форума Ответить с цитированием
Старый 30.12.2009, 23:13   #4
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Где то так:
Код:
const
  CLow = 'abcdefghijklmnopqrstuvwxyz';
  CUp = 'ABCDEFGHJKLMNOPQRSTUVWXYZ';
  CDigit = '0123456789';

var
  i, x: integer;
  L_Pass: integer;
  pass: string;
  passChars: string;
begin
  L_Pass := StrToInt(LeightPass.Text);
  pass := '';
  randomize;
  passChars := '';

  if CheckBoxLow.Checked then
    passChars := passChars + CLow;
  if CheckBoxUp.Checked then
    passChars := passChars + CUp;
  if CheckBoxDigit.Checked then
    passChars := passChars + CDigit;

  for i := 1 to L_Pass do
    pass := pass + passChars[random(length(passChars)) + 1];

  PassString.Text := pass;

end;
А вместо LeightPass лучше использовать SpinEdit
s.Creator вне форума Ответить с цитированием
Старый 30.12.2009, 23:32   #5
Che Burashka
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 12
По умолчанию

может я что то не понимаю, но код не работает. вот полный листинг файла
Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,XPMan, Menus, ErrorFormUnit,
  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  AboutBoxUnit, mxProtector, ExtCtrls; // Äîáàâèë AboutBoxUnit               {thanks to :EAGLE:}
  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
type
  TMainForm = class(TForm)
    PassString: TEdit;
    GenButton: TButton;
    CloseButton: TButton;
    MainMenu: TMainMenu;
    Element1: TMenuItem;
    Element1N1: TMenuItem;
    MailString: TEdit;
    LeightPass: TEdit;
    CheckCUp: TCheckBox;
    CheckCLow: TCheckBox;
    CheckCDig: TCheckBox;
    GenWriteButton: TButton;

    procedure GenButtonClick(Sender: TObject);
    procedure CloseButtonClick(Sender: TObject);
    procedure Element1N1Click(Sender: TObject);
    procedure LeightPassKeyPress(Sender: TObject; var Key: Char);
    procedure MailStringClick(Sender: TObject);


   


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses ErrorFormMailUnit;

{$R *.dfm}

//ïîêàç ôîðìû "î ïðîãðàììå"
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure TMainForm.Element1N1Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}


//Îñíîâíàÿ ïðîöåäóðà ïðîãðàììû
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure TMainForm.GenButtonClick(Sender: TObject);
const
CLow='abcdefghijklmnopqrstuvwxyz';
CUp='ABCDEFGHJKLMNOPQRSTUVWXYZ';   //Ñîñòàâíûå ïàðîëÿ
CDigit='0123456789';

var i,x:integer;
    L_Pass:integer;
    pass:string;
    passChars:string;
begin
If Pos('@',MailString.Text)>0 then          //Ïðîâåðêà ïðàâèëüíîñòè çàïîëíåíèÿ ïîëÿ e-mail àäðåñà
Begin
if LeightPass.Text = '' then ErrorForm.ShowModal;  //Ïðîâåðêà íà çàïîëíåííîñòü ïîëÿ äëèíû ïàðîëÿ
begin
 L_Pass:=StrToInt(LeightPass.Text);
pass:='';
randomize;
 if CheckCLow.Checked then passChars:=passChars+ CLow;
 if CheckCUp.Checked then passChars:=passChars+ CUp;
 if CheckCDig.Checked then passChars:=passChars+ CDigit;

 For i:=1 to L_Pass do
 pass:=pass+ passChars[random(length(passChars))+1];
  end;

end
       else ErrorFormMail.ShowModal;

PassString.Text:=pass;

end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}


//Çàêðûòèå ãëàâíîé ôîðìû
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure TMainForm.CloseButtonClick(Sender: TObject);
begin
MainForm.Close;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}


//Ïðîâåðêà íà äîïóñòèìîñòü ââîäèìûõ ñèìâîëîâ â "äëèíà ïàðîëÿ"
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure TMainForm.LeightPassKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; // öèôðà
#8 : ; // êëàâèøà <Back Space>
#13 : LeightPass.SetFocus ; // êëàâèøà <Enter>
// îñòàëüíûå ñèìâîëû — çàïðåùåíû
else Key :=Chr(0); // ñèìâîë íå îòîáðàæàòü
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}


 //î÷èñòêà ïðè êëèêå còðîêè ââîäà àäðåñà
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure TMainForm.MailStringClick(Sender: TObject);
begin
MailString.Clear;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}



{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}



{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}





end.



{}
Che Burashka вне форума Ответить с цитированием
Старый 30.12.2009, 23:46   #6
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Прежде чем копировать надо было в Delphi на русскую раскладку перейти.
А лучше зазиповать и прикрепить ( убрав dcu и exe файлы ).
Навскидку:
куда дел
Код:
passChars := '';
Попробую еще раз
Код:
const
  CLow = 'abcdefghijklmnopqrstuvwxyz';
  CUp = 'ABCDEFGHJKLMNOPQRSTUVWXYZ';
  CDigit = '0123456789';

var
  i, x: integer;
  L_Pass: integer;
  pass: string;
  passChars: string;
begin
  if Pos('@', MailString.Text) > 0 then
  begin
    if LeightPass.Text = '' then
      raise Exception.Create('Не указано количество символов');
    L_Pass := StrToInt(LeightPass.Text);
    pass := '';
    passChars := '';
    randomize;
    if CheckCLow.Checked then
      passChars := passChars + CLow;
    if CheckCUp.Checked then
      passChars := passChars + CUp;
    if CheckCDig.Checked then
      passChars := passChars + CDigit;

    for i := 1 to L_Pass do
      pass := pass + passChars[random(length(passChars)) + 1];
    PassString.Text := pass;
  end
  else
    raise Exception.Create('Это не емайл');
s.Creator вне форума Ответить с цитированием
Старый 31.12.2009, 18:07   #7
Che Burashka
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 12
По умолчанию

s.Creator , да и мой код работал тоже, просто я боксы балда не отметил
Che Burashka вне форума Ответить с цитированием
Старый 31.12.2009, 19:06   #8
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Но локальные переменные не забывайте инициализировать, а то там сперва мусор памяти и могут быть неожиданности.
s.Creator вне форума Ответить с цитированием
Старый 31.12.2009, 19:13   #9
Che Burashka
Пользователь
 
Регистрация: 30.12.2009
Сообщений: 12
По умолчанию

а можно подробнее про локальные переменные?! и как сделать так, что бы не было СИСТЕМНЫХ сообщений об ошибках?
Изображения
Тип файла: jpg error.JPG (6.9 Кб, 45 просмотров)
Che Burashka вне форума Ответить с цитированием
Старый 31.12.2009, 19:25   #10
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Подробней уже не сегодня и почитайте хоть немного, литературы полно.
Про ошибки смотрим
Код:
 try
 except
 end;
SpinEdit и IntToStrDef.
Все.
С Новым Годом !!!
s.Creator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При переключении между чекбоксами - ошибка Stack overflow. Как исправить эту ошибку? SkAndrew Общие вопросы Delphi 5 26.08.2008 21:32
Как связать C++ и Access? demon-189 Общие вопросы C/C++ 1 23.04.2008 19:49
DBChart как связать с БД ? Cantana Помощь студентам 2 02.02.2008 14:40
древовидный список с чекбоксами linarka Общие вопросы Delphi 4 26.06.2007 10:04