Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 187

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Помогите пожалуйста новичку. значит вопрос следующего характера на основной форме, у меня есть кнопка, при нажатии которой должна выскочить "опросное окно", после ввода данных в нем и нажатии кнопки подтверждения "опросное окно" (с некоторыми компонентами), закрывается и дальнейшая работа происходит с основной формой.

Примечание #1 (10 июня 2012, 16:37):
Как и каким образом можно организовать "опросное окно"???

Alexandr280480 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Alexandr280480 (статус: Посетитель)
Вопрос отправлен: 10 июня 2012, 13:23
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 15 июня 2012, 22:49; участников в обсуждении: 4.
Егор

Егор (статус: 10-ый класс), 10 июня 2012, 16:50 [#1]:

Form2.ShowModal();
не?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Alexandr280480

Alexandr280480 (статус: Посетитель), 10 июня 2012, 17:07 [#2]:

А Frame можно использовать?
min@y™

min@y™ (статус: Доктор наук), 10 июня 2012, 19:00 [#3]:

В чём проблема-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 июня 2012, 20:47 [#4]:

Цитата (Alexandr280480):

А Frame можно использовать?

а для чего?
Alexandr280480

Alexandr280480 (статус: Посетитель), 11 июня 2012, 09:26 [#5]:

Min@y, проблема в том что я не знаю как...(где можно прочитать или увидеть новичку?).

Мережников Андрей, для создания "опросного окна", может можно ещё как нибудь его создать, я не утверждаю, я хочу спросить у ВАС ЭКСПЕРТЫ как его можно создать?
min@y™

min@y™ (статус: Доктор наук), 11 июня 2012, 09:45 [#6]:

Короче, вот тебе пример модуля "опросной", как ты говоришь, формы из одной моей программы - модальная форма запроса поиска/замены текста в текстовом редакторе. Вот эта форма:

А вот код модуля:
unit uSearchReplaceForm;
 
interface
 
uses
  //============================== Модули проекта ==============================
  uTypes, uRoutines, uSettings,
  //=============================== Левые модули ===============================
  SynEditTypes,
  //=================== Системные модули и модули компонентов ==================
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Placemnt, ExtCtrls, StdCtrls;
 
type
  TSearchReplaceForm = class(TProjectCustomForm)
    FormStorage: TFormStorage;
    ReplaceLabel: TLabel;
    FindLabel: TLabel;
    OkButton: TButton;
    CancelButton: TButton;
    FindComboBox: TComboBox;
    ReplaceComboBox: TComboBox;
    OptionsGroupBox: TGroupBox;
    MatchCaseCheckBox: TCheckBox;
    WholeWordCheckBox: TCheckBox;
    DirectionRadioGroup: TRadioGroup;
    OriginRadioGroup: TRadioGroup;
    ScopeRadioGroup: TRadioGroup;
    procedure ComboBoxClick(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 
    // Методы
    function ShowModal: Integer; override; 
    procedure ApplicationIdleProc; override;
  end;
 
  TSearchReplaceAction = (sraFind, sraReplace);
  TSynEditSearchReplaceData = record
    FindWhat:      string;                // Что ищем
    ReplaceTo:     string;                // На что заменяем
    Default:       string;                // Текст для автоподстановки в FindCombobox.Text
    Options:       TSynSearchOptions;     // Опции
    Action:        TSearchReplaceAction;  // Флаг "поиск | замена"
    SelectExists:  Boolean;               // Флаг того, что в тексте файла есть выделение
  end;
 
var
  SearchReplaceForm: TSearchReplaceForm;
  SynEditSearchReplaceData: TSynEditSearchReplaceData;
 
function RequestSearchReplaceData: Boolean;
 
implementation
 
{$R *.dfm}
 
function RequestSearchReplaceData: Boolean;
begin
  if not Assigned(SearchReplaceForm)
    then SearchReplaceForm:= TSearchReplaceForm.Create(Application);
 
  try
    Result:= SearchReplaceForm.ShowModal() = mrOk;
  finally
    FreeAndNil(SearchReplaceForm);
  end;
end;
 
{ TSerachReplaceForm }
 
procedure TSearchReplaceForm.ApplicationIdleProc;
begin
  inherited;
  OkButton.Enabled:= FindComboBox.Text <> '';
end;
 
procedure TSearchReplaceForm.ComboBoxClick(Sender: TObject);
var
  CB: TComboBox;
begin
  CB:= TComboBox(Sender);
  if CB.ItemIndex <> -1
    then begin
           CB.Text:= CB.Items[CB.ItemIndex];
           CB.SelectAll();
         end;
end;
 
constructor TSearchReplaceForm.Create(AOwner: TComponent);
begin
  inherited;
  // Инициализация
  FormStorage.IniSection:= 'Forms\' + Name;
end;
 
destructor TSearchReplaceForm.Destroy;
begin
  // Финализация
  if ModalResult = mrOk
    then begin
           PushStringItem(FindComboBox.Items, FindComboBox.Text, 32);
           PushStringItem(ReplaceComboBox.Items, ReplaceComboBox.Text, 32);
         end;
 
  inherited;
end;
 
function TSearchReplaceForm.ShowModal: Integer;
begin
  // Инициализация контролов
  with SynEditSearchReplaceData do
    begin
      // Загрузка в комбобоксы строк, введённых ранее
      FindComboBox.Items.Assign(TStringListOption(ProgramSettings.OptionsByName[snSearchTemplates]).List);
      if Action = sraReplace
        then ReplaceComboBox.Items.Assign(TStringListOption(ProgramSettings.OptionsByName[snReplaceTemplates]).List);
 
      FindComboBox.Text:= Default;
      FindComboBox.SelectAll();
      ReplaceComboBox.Enabled:= Action = sraReplace; // Доступность при замене
      ReplaceLabel.Enabled:=    Action = sraReplace; // Доступность при замене
      ScopeRadioGroup.ItemIndex:= Integer(SelectExists); // Везде / в выделении
    end; // with
 
  Result:= inherited ShowModal();
 
  // Инициализация структуры поиска/замены
  if Result = mrOk
    then with SynEditSearchReplaceData do
           begin
             FindWhat:= FindComboBox.Text;
             ReplaceTo:= ReplaceComboBox.Text;
 
             Options:= [];
             if MatchCaseCheckBox.Checked          then Include(Options, ssoMatchCase);
             if WholeWordCheckBox.Checked          then Include(Options, ssoWholeWord);
             if DirectionRadioGroup.ItemIndex <> 0 then Include(Options, ssoBackwards);
             if ScopeRadioGroup.ItemIndex <> 0     then Include(Options, ssoSelectedOnly);
             if OriginRadioGroup.ItemIndex <> 0    then Include(Options, ssoEntireScope);
             if Action = sraReplace                then Options:= Options + [ssoReplace, ssoReplaceAll];
 
             // Запоминаю введённое в настройках
             TStringListOption(ProgramSettings.OptionsByName[snSearchTemplates]).PushItem(FindWhat, 32);
             if Action = sraReplace
               then TStringListOption(ProgramSettings.OptionsByName[snReplaceTemplates]).PushItem(ReplaceTo, 32);
           end; // with
end;
 
procedure TSearchReplaceForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #13) and OkButton.Enabled
    then OkButton.Click();
end;
 
end.
Проанализируй код и сделай по аналогии.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 11 июня 2012, 09:56 [#7]:

Хотя, не, давай-ка я тебе пример попроще найду...
О! Вот тебе простейшее окошко для ввода пароля, вот такое:


Вот код модуля этой формы:
unit uPass;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
// Добавленные модули
  md5;
 
type
  TPassForm = class(TForm)
    PassEdit: TEdit;
    Label1: TLabel;
    OkButton: TButton;
    CancelButton: TButton;
    procedure PassEditKeyPress(Sender: TObject; var Key: Char);
  public
 
  end;
 
var
  PassForm: TPassForm;
 
function GetPassword(var Hash: string): TModalResult;
 
implementation
 
{$R *.dfm}
 
{ TPassForm }
 
function GetPassword(var Hash: string): TModalResult;
begin
  if not Assigned(PassForm)
    then Application.CreateForm(TPassForm, PassForm);
 
  try
    Result:= PassForm.ShowModal;
    if Result = mrOk
      then Hash:= MD5DigestToStr(MD5String(PassForm.PassEdit.Text));
  finally
    FreeAndNil(PassForm);
  end;
end;
 
procedure TPassForm.PassEditKeyPress(Sender: TObject; var Key: Char);
begin
 if Key = #13 // нажали Enter
   then ModalResult:= mrOk;
end;
 
end.

А вот так эта форма показывается из другого модуля:
  // Запрос пароля
  PassHash:= ReadPass; // Чтение хэша из файла
  if GetPassword(UserHash) = mrOk
    then begin
           if UserHash = PassHash
             then begin
                    // Создание главного окна, если пароль подошёл
                    Application.CreateForm(TMainForm, MainForm);
                    MainForm.FPassHash:= UserHash;
                    Application.Run;
                  end
             else Application.MessageBox(PChar('Неверный пароль'),
                                         PChar('Ахтунг!'),
                                         MB_OK + MB_ICONERROR);
 
         end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Alexandr280480

Alexandr280480 (статус: Посетитель), 15 июня 2012, 19:16 [#8]:

Добрый вечер!!!
Егор, Мережников Андрей, Min@y ОГРОМНОЕ ВAМ СПАСИБО!!!
С ВАШЕЙ помощью, в кротчайшие сроки, я сделал "Опросную форму".

Тему считаю закрытой, примеры и советы исчерпывающие.
:-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-)

15 июня 2012, 21:52: Статус вопроса изменён на решённый (изменил модератор min@y™): По желанию автора.

min@y™

min@y™ (статус: Доктор наук), 15 июня 2012, 21:54 [#9]:

Цитата (Alexandr280480):

Min@y

И не надо коверкать мой ник. Он со мной больше 12 лет. Если не умеешь набрать его с клавы - скопируй. Если не умешь скопировать - напиши. Если не можешь написать - обратись, я научу.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Alexandr280480

Alexandr280480 (статус: Посетитель), 15 июня 2012, 22:49 [#10]:

Прошу прошения,min@y™!

20 июня 2012, 21:21: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.04 сек.