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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 17:46   #11
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

http://www.programmersforum.ru/showt...ghlight=hostid
Смотрим здесь.
Проверил ссылку - работает. В предыдущем посте - да, не работает.Странно, ссылка одна и та же.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 20.08.2009, 18:40   #12
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

DeKot, у тебя первая ссылка http://www.programmersforum.ru/showt...ghlight=hostid
а вторая без многоточия.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 20.08.2009, 18:49   #13
Ark
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

Фух. Вроде управился.

Точнее обошёл проблему а не решил её.

Дело в том, что в методах формы OnShow, OnCreate, OnActivate - Close не работает. Причём мой Sleep действовал так - сначала появляется окно без ничего. Проходит 2 секунды - и на окне прорисовываются все элементы.

Сделал так. Поставил на форму Label и написал - "Щёлкните по логотипу", а уж по щелчку логотипа - программа проверяет наличие серийника, и если его нет удлинняется.

Теперь последний вопросик - и я отстану. Честно-честно.

Допустим - я считал id компа.

Чтобы сделать пресловутую выше систему защиты (код авторизации - серийный номер (ну или пин-код - называйте как хотите)) нужно сделать преобразование дважды.

Получить из id компа (который является строкой символов) код авторизации. А также из кода авторизации получить серийный номер.

Было б всё это числами - без проблем сделал. Голая математика и чуть-чуть воображения. А вот как можно перекодировать текст? В имени компа буковки тоже содержатся.

PS: Короче подскажите как получить порядковый номер символа в этой 256-значной кодировке.
Ark вне форума Ответить с цитированием
Старый 20.08.2009, 19:36   #14
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Chr() Ord() - Посмотри на них, ну разве они не чудо?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 20.08.2009, 21:06   #15
Ark
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
Радость

Усё. Спасибо большое, ребята.

Помогли.
Ark вне форума Ответить с цитированием
Старый 20.08.2009, 22:36   #16
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Ark
Предлагаю вариант без слипа:
.dpr:
Код:
program test;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Form2 := TForm2.Create(nil);
  try
    if not Form2.CheckAndShow() then
      exit; // незарегистрированая - прекращаем работу

    Application.CreateForm(TForm1, Form1);
    // возможно загрузка еще Датамодулей
  finally
    Form2.Free;
  end;

  Application.Run;
end.
в модуле формы:
Код:
type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    function CheckAndShow(): Boolean;
    function CheckSerial(serial: string): Boolean;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

function TForm2.CheckAndShow: Boolean;
var
RegSer: TReginiFile;
Serial: String;

begin

  RegSer:=TReginiFile.Create;
  RegSer.RootKey:=HKEY_LOCAL_MACHINE;
  RegSer.OpenKey('Software',true);
  Serial := RegSer.ReadString('ProgName','Serial Number','0');
  RegSer.Free;

  Result := CheckSerial(serial);
  if Result then
  begin  // Серийник найден просто отображаем логотип пока создаются главная и др. формы
    FormStyle := fsStayOnTop;
    ClientHeight:=91;
    Show;
  end
  else
  begin
    ClientHeight:=200;
    if ShowModal = mrOk then
    begin
      Serial := Edit1.Text;// или куда там вводят ключ
      Result := CheckSerial(serial);
      if Result then
        // Сохраняем в реестр
    end;
  end;

end;

function TForm2.CheckSerial(serial: string): Boolean;
begin
  // твой алгоритм проверки
  Result := (serial = '1234-1234-1234-1234');
end;

Последний раз редактировалось s.Creator; 20.08.2009 в 22:39.
s.Creator вне форума Ответить с цитированием
Старый 20.08.2009, 23:15   #17
pro100-delphi
Пользователь
 
Аватар для pro100-delphi
 
Регистрация: 19.08.2009
Сообщений: 99
По умолчанию

ну вы ребят и даёте.
У меня есть предложение.

Есть форма которая должна быть главной и есть форма где нужно ввести key.
При создание главной формы мы меняем у всех её объектов Enabled на false, к примеру button1.enabled:=false; (тоесть тут мы делаем кнопку серой и делаем что б на неё нельзя было нажать) и так делаем со всеми компонентами у которых есть свойство Enabled. Потом показываем форму с key, проверяем и если key правильный то меняем Enabled на true, button1.enabled:=true;, а если нет закрываем прогу

Пример:
У нас есть form1 и unit1, form2 и unit2
form1 -главная форма
form2 - форма куда вводим key
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
button1.enabled:=false;
//и так далее по всем компонентам
unit2.form2.Show;
//только что мы заблокировали компоненты и показали форму с паролем
end;
а теперь когда форма 2 создалась
Код:
procedure TForm2.Button2Click(Sender: TObject);
begin
if edit1.text='10-656-3434-646' then
begin
unit1.button1.enabled:=true;
form2.close;
end
else
begin
application.Terminate;
end;
end;
Как идея? напишите норм идея или нет
pro100-delphi вне форума Ответить с цитированием
Старый 20.08.2009, 23:35   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

во первых:
вместо
Код:
unit1.button1.enabled:=true;
надо:
Код:
form1.button1.enabled:=true;
...писанины многовато(если компонентов много?!?)
помоему лучше либо модальная форма(при появлении или ДО появления основной)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2009, 00:17   #19
Ark
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

Писанины действительно многовато.

У меня в основном окне я ещё вкладки сделал и на каждой мясо - компонентов 30 наберётся точно.

Вариант c.Creator ,более близок к истине. Он позволяет обойти обязаловку с кликанием.

Только я не понял несколько моментов (скорее всего из-за банального недостатка знаний):

Код:
try
if not Form2.CheckAndShow() then
   exit; 

    Application.CreateForm(TForm1, Form1);
    
  finally
    Form2.Free;
  end;
  Application.Run;
end.
Зачем try-finally. Какая ошибка может произойти?


Код:
  Result := CheckSerial(serial);
  if Result then
  begin  
    FormStyle := fsStayOnTop;
    ClientHeight:=91;
    Show;
  end
  else
  begin
    ClientHeight:=200;
    if ShowModal = mrOk then
    begin
      Serial := Edit1.Text;// или куда там вводят ключ
      Result := CheckSerial(serial);
      if Result then
        // Сохраняем в реестр
    end;
  end;

end;
Не понял - зачем Show в 6 строчке?
Что означает if ShowModal = mrOk then?

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

Последний раз редактировалось Ark; 21.08.2009 в 00:20.
Ark вне форума Ответить с цитированием
Старый 21.08.2009, 09:16   #20
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

По порядку:
В .dfm:
Form2 := TForm2.Create(nil); пишем nil чтобы она не стала главной формой.
try-finally - Ты можешь дать 100% гарантии что не произойдет никакой ошибки, а ресурсы надо освобождать когда они не нужны.
Конечно можно сказать что при ошибке в данном случае произойдет аварийное завершение программы и система сама почистит всю память, НО мы же правильные программисты и чем более коммерческой будет программа тем больше будем делать защиты и обработки ошибок.

button1.enabled:=true;//... может просто выставить Form1.Enabled = False ( в инспекторе объектов) и когда все хорошо сделать доступной.
Итого:
Код:
begin
  Application.Initialize;
  Form2 := TForm2.Create(nil);
  try
    if not Form2.CheckAndShow() then
      exit; // незарегистрированая - прекращаем работу

    Application.CreateForm(TForm1, Form1);
    // возможно загрузка еще Датамодулей
    Sleep(2000); // если Form1 создается очень быстро
    Form1.Enabled := True;
  finally
    Form2.Free;
  end;

  Application.Run;
end.
Код:
  if Result then
  begin  
    FormStyle := fsStayOnTop; // чтобы форма на самом верху
    ClientHeight:=91;
    Show; // в дизайнере выставлено Visible = False
    Update;// добавь чтоб нарисовалась
  end
Просто показываем логотип пока создается главная форма и др.
Когда будет Form2.Free; она пропадет.
Код:
if ShowModal = mrOk then
Здесь форма отображается модально и ничего не будет выполняться пока она не закроется - проверяем какой результат присвоен при закрытии. Смотри прикрепленный проект и читай про модальные формы.
Вложения
Тип файла: zip TestKay.zip (3.8 Кб, 10 просмотров)
s.Creator вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заставка к программе (C++) NoiseEP Помощь студентам 0 08.04.2009 17:24
Заставка на рабочий стол Vladya Помощь студентам 1 11.11.2008 11:19
Антиэкранная заставка Veiron Общие вопросы Delphi 8 24.05.2008 21:37
Заставка в Делфи Верчик Помощь студентам 2 19.11.2007 23:32
заставка при старте програми VVk Общие вопросы Delphi 3 02.11.2007 11:37