|
Вопрос # 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 » Работа с компонентами и библиотеками модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|