| 
| 
 | Вопрос # 6 187/ вопрос решён / | 
 |  Доброго времени суток, уважаемые эксперты!Помогите пожалуйста новичку. значит вопрос следующего характера на основной форме, у меня есть кнопка, при нажатии которой должна выскочить "опросное окно", после ввода данных в нем и нажатии кнопки подтверждения "опросное окно" (с некоторыми компонентами), закрывается и дальнейшая работа происходит с основной формой.
 Примечание #1 (10 июня 2012, 16:37): Как и каким образом можно организовать "опросное окно"??? 
 
|  |   Вопрос задал: Alexandr280480 (статус: Посетитель)Вопрос отправлен: 10 июня 2012, 13:23
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 10; последнее сообщение — 15 июня 2012, 22:49; участников в обсуждении: 4. 
|   | Егор (статус: 10-ый класс), 10 июня 2012, 16:50 [#1]:Form2.ShowModal(); не?
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | Alexandr280480 (статус: Посетитель), 10 июня 2012, 17:07 [#2]:А Frame можно использовать? |  
|   | min@y™ (статус: Доктор наук), 10 июня 2012, 19:00 [#3]:В чём проблема-то? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Alexandr280480 (статус: Посетитель), 11 июня 2012, 09:26 [#5]: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™ (статус: Доктор наук), 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  15 июня 2012, 21:52: Статус вопроса изменён на решённый (изменил модератор min@y™): По желанию автора. 
|   | min@y™ (статус: Доктор наук), 15 июня 2012, 21:54 [#9]: Цитата (Alexandr280480): Min@y  И не надо коверкать мой ник. Он со мной больше 12 лет. Если не умеешь набрать его с клавы - скопируй. Если не умешь скопировать - напиши. Если не можешь написать - обратись, я научу.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Alexandr280480 (статус: Посетитель), 15 июня 2012, 22:49 [#10]:Прошу прошения,min@y™! |  20 июня 2012, 21:21: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |