Вопрос Подсказка с примером в поле ввода TNewEdit.

AlexS

Новичок
Всем привет.
Задумка проста, а её воплощение не очень.
Имеется страница с полем ввода(TNewEdit) некой информации.
По задумке, в поле TNewEdit(а) должна быть полупрозрачная или серая подсказка с примером.
При установке курсора в поле ввода, подсказка должна исчезнуть и далее вводимый текст должен вводиться обычным цветом...
Возникли проблемы...
При открытии страницы с этим полем, текст подсказки находится в выделенном состоянии, как убрать выделение?
При вводе текста, если допущена ошибка к примеру и надо переставить курсор для правки текста(повторный клик в поле), то введенный текст исчезает.
Исходя из этих проблем думаю что иду не в том направлении, а вот как эту задачу решить иначе я пока не в курсе...
Ковыряюсь уже давно. Прошу помощи.

001.png

AppName=MyAppName
AppVersion=1.0.0.0
DefaultDirName={pf}\MyAppName
DisableWelcomePage=yes

[ Code]
var
CustomPage: TWizardPage;
NewEdit: TNewEdit;

procedure OnClick1(Sender: TObject);
begin
NewEdit.Text := '';
NewEdit.Font.Color := clBlack;
end;

procedure InitializeWizard();
begin
CustomPage := CreateCustomPage(wpWelcome, '', '');

NewEdit := TNewEdit.Create(WizardForm);
with NewEdit do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
Text := 'Введите текст (например: Текст)';
Font.Color := clWindowFrame;
OnClick := @OnClick1;
end;
end;
 
Последнее редактирование:

Nemko

Дилетант
Модератор
AlexS, попробуйте изменить параметр AutoSelect:=False для TEdit.

Код:
[Setup]
AppName=MyAppName
AppVersion=1.0.0.0
CreateAppDir=no
DisableWelcomePage=yes

[Code]
var
  NewEdit: TNewEdit;
  CustomPage: TWizardPage;

procedure OnClick(Sender: TObject);
begin
  NewEdit.Text:= '';
  NewEdit.Font.Color:=clBlack;
end;

procedure OnEnter(Sender: TObject);
begin
  NewEdit.Text := '';
  NewEdit.Font.Color:=clBlack
end;

procedure InitializeWizard;
begin
  CustomPage := CreateCustomPage(wpWelcome, '', '');

  NewEdit := TNewEdit.Create(WizardForm);
  with NewEdit do begin
    AutoSelect:=False;
    SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
    Text:='Введите текст (например: Текст)';
    Font.Color:=clWindowFrame;
    OnClick:=@OnClick;
    OnMouseEnter:=@OnEnter;
    Parent:=CustomPage.Surface;
 end;
end;
 
Последнее редактирование:

AlexS

Новичок
Nemko, спасибо.
AutoSelect:=False действительно убрало выделение.
А вот процедура OnEnter не подходит(я её ранее пробовал), так как при вводе текста в поле TEdit(а) малейшее движение курсора над полем сразу стирает введенный текст.
В целом всё уже работает как задумано, остаётся проблема с редактированием введенного текста...
 

Nemko

Дилетант
Модератор
AlexS, не знаю как в другой версии, но в Расширенной вроде работает. Да и там Сами под себя подправите, единственное чего не пойму как привязку к регистру первого символа отвязать (совсем я отупел), может если доработаете выложите пример, может кому сгодится.

Код:
[Setup]
AppName=MyAppName
AppVersion=1.0.0.0
CreateAppDir=no
DisableWelcomePage=yes

[Code]
var
  NewEdit: TNewEdit;
  CustomPage: TWizardPage;
  //
  ExampleText: String;
  FirstEnter: Boolean;

procedure ErrorEnterText(Sender: TObject);
begin
  TNewEdit(Sender).Font.Color:=clWindowFrame;
  TNewEdit(Sender).Text:='Введите текст (например: '+ ExampleText +')';
  FirstEnter:=False;
end;

procedure OnEnter(Sender: TObject);
begin
  if not FirstEnter then begin
    NewEdit.Text:= '';
    NewEdit.Font.Color:=clBlack;
  end;
end;

procedure OnChange(Sender: TObject);
var
  i: Integer;
begin
  if not FirstEnter then begin
  if Length(TNewEdit(Sender).Text) <= 0 then Exit;
    if Lowercase(TNewEdit(Sender).Text[1]) = Lowercase(ExampleText[1]) then begin
      TNewEdit(Sender).Font.Color:=clBlack;
      TNewEdit(Sender).Text:=TNewEdit(Sender).Text[1];
      TNewEdit(Sender).SelStart:=Length(TNewEdit(Sender).Text);
      FirstEnter:=True;
    end else begin
      TNewEdit(Sender).Font.Color:=clWindowFrame;
      TNewEdit(Sender).Text:='Введите текст (например: '+ ExampleText +')';
      FirstEnter:=False;
    end;
  end else begin
    if (Length(TNewEdit(Sender).Text)-1 > Length(ExampleText)-1) then ErrorEnterText(Sender)
    else begin
    if Length(TNewEdit(Sender).Text) <= 0 then Exit;
      if Lowercase(TNewEdit(Sender).Text[Length(TNewEdit(Sender).Text)]) <> Lowercase(ExampleText[Length(TNewEdit(Sender).Text)]) then begin
        TNewEdit(Sender).Font.Color:=clWindowFrame;
        TNewEdit(Sender).Text:='Введите текст (например: '+ ExampleText +')';
        FirstEnter:=False;
      end;
    end;
  end;
end;

procedure InitializeWizard;
begin
  ExampleText:='Текст';
  CustomPage:=CreateCustomPage(wpWelcome, '', '');
  //
  NewEdit:=TNewEdit.Create(WizardForm);
  with NewEdit do begin
    AutoSelect:=False;
    Font.Color:=clWindowFrame;
    SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
    Text:='Введите текст (например: '+ ExampleText +')';
    OnMouseEnter:=@OnEnter;
    OnChange:=@OnChange;
    Parent:=CustomPage.Surface;
 end;
end;
 
Последнее редактирование:

Andreo Fadio

Старожил
так как при вводе текста в поле TEdit(а) малейшее движение курсора над полем сразу стирает введенный текст.
У вас по клику на TEdit стоит исполнение процедуры:
Код:
OnClick := @OnClick1;
Которая исполняет код:
Код:
NewEdit.Text := '';
приравнивает к пустоте поле на одинарный клик на область с вашим TEdit.

Можно к примеру поменять на двойное нажатие - OnDblClick:= @OnClick1;
Тогда по клику на TEdit ничего не произойдет.
 
Последнее редактирование:

AlexS

Новичок
Andreo Fadio, малейшее движение курсора над полем сразу стирает введенный текст - это уже из примера Nemko, а именно из-за процедуры OnEnter.
На счет OnClick, там всё работает как и задумывалось... То есть, по умолчанию подсказка всегда показывается в TEdit, при наведении курсора ничего не должно происходить, а вот если кликнуть в поле TEdit, то подсказка должна исчезнуть и поле очиститься. Вся суть оставшейся проблемы в том, что если ввести текст в TEdit и по какой-то причине кликнуть в поле ещё раз, то введённый текст исчезает так как срабатывает процедура OnClick.
Вобщем нужно как-то заставить процедуру OnClick срабатывать только один раз, при повторном клике процедуру игнорировать...
 

Andreo Fadio

Старожил
На счет OnClick, там всё работает как и задумывалось... То есть, по умолчанию подсказка всегда показывается в TEdit, при наведении курсора ничего не должно происходить, а вот если кликнуть в поле TEdit, то подсказка должна исчезнуть и поле очиститься. Вся суть оставшейся проблемы в том, что если ввести текст в TEdit и по какой-то причине кликнуть в поле ещё раз, то введённый текст исчезает так как срабатывает процедура OnClick.
Вобщем нужно как-то заставить процедуру OnClick срабатывать только один раз, при повторном клике процедуру игнорировать...
На основе вашего примера кода:
Код:
[Setup]
AppName=MyAppName
AppVersion=1.0.0.0
DefaultDirName={pf}\MyAppName
DisableWelcomePage=yes

[Code]
var
CustomPage: TWizardPage;
NewEdit: TNewEdit;
FirstClick: Boolean;

procedure OnClick1(Sender: TObject);
begin
if FirstClick then
begin
NewEdit.Text := '';
NewEdit.Font.Color := clBlack;
FirstClick:=False;
end;
end;

procedure InitializeWizard();
begin
CustomPage := CreateCustomPage(wpWelcome, '', '');

NewEdit := TNewEdit.Create(WizardForm);
with NewEdit do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
Text := 'Введите текст (например: Текст)';
Font.Color := clWindowFrame;
OnClick := @OnClick1;
end;
FirstClick:=True;
end;
Теперь должно работать один раз.
 

AlexS

Новичок
Andreo Fadio, то что надо... Спасибо большое!
А возможно-ли сделать так чтобы если не вводить свой текст в поле, всё возвращалось в исходное состояние.
Если на странице несколько TEdit(ов) и у всех есть свои подсказки...
К примеру кликнув в поле первого TEdit подсказка исчезает(всё как в примере выше), но если после этого не вводить свой текст, а кликнуть в другой TEdit, то подсказка первого возвращается назад, так как текст в поле не вводился?
 

Andreo Fadio

Старожил
Andreo Fadio, то что надо... Спасибо большое!
А возможно-ли сделать так чтобы если не вводить свой текст в поле, всё возвращалось в исходное состояние.
Если на странице несколько TEdit(ов) и у всех есть свои подсказки...
К примеру кликнув в поле первого TEdit подсказка исчезает(всё как в примере выше), но если после этого не вводить свой текст, а кликнуть в другой TEdit, то подсказка первого возвращается назад, так как текст в поле не вводился?
Как-то так например можно.
Код:
[Setup]
AppName=MyAppName
AppVersion=1.0.0.0
DefaultDirName={pf}\MyAppName
DisableWelcomePage=yes

[Code]
var
CustomPage: TWizardPage;
NewEdit, NewEdit2: TNewEdit;
FirstClick: Boolean;
FirstClick2: Boolean;

function NewEditP:string; begin Result:= NewEdit.Text; end;
function NewEditP2:string; begin Result:= NewEdit2.Text; end;

procedure OnClick1(Sender: TObject);
begin
if ExpandConstant('{code:NewEditP2}') = '' then
begin
NewEdit2.Text := 'Введите текст (например: Текст)';
NewEdit2.Font.Color := clWindowFrame;
FirstClick2:=True;
end;
if FirstClick then
begin
NewEdit.Text := '';
NewEdit.Font.Color := clBlack;
FirstClick:=False;
end;
end;

procedure OnClick2(Sender: TObject);
begin
if ExpandConstant('{code:NewEditP}') = '' then
begin
NewEdit.Text := 'Введите текст (например: Текст)';
NewEdit.Font.Color := clWindowFrame;
FirstClick:=True;
end;
if FirstClick2 then
begin
NewEdit2.Text := '';
NewEdit2.Font.Color := clBlack;
FirstClick2:=False;
end;
end;

procedure InitializeWizard();
begin
CustomPage := CreateCustomPage(wpWelcome, '', '');

NewEdit := TNewEdit.Create(WizardForm);
with NewEdit do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
Text := 'Введите текст (например: Текст)';
Font.Color := clWindowFrame;
OnClick := @OnClick1;
end;
NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(24), ScaleY(78), ScaleX(369), ScaleY(21));
Text := 'Введите текст (например: Текст)';
Font.Color := clWindowFrame;
OnClick := @OnClick2;
end;
FirstClick:=True;
FirstClick2:=True;
end;
 
Последнее редактирование:

AlexS

Новичок
Andreo Fadio, Спасибо большое! Работает...
Если кликнуть после TEdit в пустое место инсталлятора, то одно из двух полей подсказку не возвращает...
А так в целом все работает хорошо (кроме этой мелочи).
 
Последнее редактирование:

AlexS

Новичок
Изучил я детально примеры приведенные выше (спасибо БОЛЬШОЕ за помощь и отзывчивость Nemko и Andreo Fadio), понял в каком направлении ковырять скрипт.
В целом пойдя по новому пути почти все получилось. Все замыслы сработали.
Нужна ещё одна маленькая помощь. не могу разобраться с WizardForm.ActiveControl. Точнее не пойму, что нужно указать, чтобы при клике курсором в любом свободном месте окна инсталлятора курсор исчезал из TEdit, а активным уже было окно инсталлятора. Подробнее в примере...
[Setup]
AppName=MyAppName
AppVersion=1.0.0.0
DefaultDirName={pf}\MyAppName
DisableWelcomePage=yes

[_Code]
var
CustomPage: TWizardPage;
KomuEdit: TNewEdit;
ExampleText: String;

procedure OnClick1(Sender: TObject); // Процедура выполняющаяся при клике в TEdit (тут все работает нормально...)
begin
ExampleText:='Введите E-mail получателя (например: user@mail.ru)'; // подсказка - тут всё понятно
begin
if KomuEdit.Text <> '' then begin // Если в TEdit есть текст
if KomuEdit.Font.Color = clWindowFrame then begin // Его цвет серый
if KomuEdit.Text = ExampleText then begin // И текст является подсказкой, то - при клике
KomuEdit.Text := '' // Удаляем тект и очищаем TEdit
KomuEdit.Font.Color := clBlack; // Цвет вводимого далее текста будет черным
end;
end;

if KomuEdit.Text <> '' then begin // Если в TEdit есть текст
if KomuEdit.Font.Color = clWindowFrame then begin // Его цвет серый
if KomuEdit.Text <> ExampleText then begin // И текст не является подсказкой(другой текст), то - при клике в TEdit
KomuEdit.Font.Color := clBlack;; // Цвет имеющегося текста станет черным (типа TEdit стал активным)
end;
end;
end;
end;
end;
end;

procedure FormClick(Sender: TObject); // Процедура выполняющаяся при клике в пустом месте формы (а вот тут проблема...)
begin
// Тут и есть вся проблема. Если указать WizardForm.Active, то все условия что ниже, соблюдаются только при клике
// по WizardForm(нижняя часть окна), а нужно чтобы срабатывало при клике в любом месте окна...
if WizardForm.Active then // так срабатывает если кликнуть в нижней части окна...
// Вобщем условие if WizardForm.Active нужно заменить на другое, чтобы срабатывало при клике в любом месте окна...


begin
if KomuEdit.Text = '' then begin // И в TEdit нет текста, то
KomuEdit.Text := ExampleText; // Текст в TEdit становится подсказкой
KomuEdit.Font.Color := clWindowFrame; // И цвет подсказки серый
WizardForm.ActiveControl := WizardForm.NextButton; // Меняем активный элемент страницы, чтобы убрать курсор из поля TEdit
end;
if KomuEdit.Text <> '' then begin // Если в TEdit есть текст, то
KomuEdit.Font.Color := clWindowFrame; // Цвет его будет серый, так как активна форма, а не TEdit
WizardForm.ActiveControl := WizardForm.NextButton; // Меняем активный элемент страницы, чтобы убрать курсор из поля TEdit
end;
end;
end;

procedure InitializeWizard();
begin
ExampleText:='Введите E-mail получателя (например: user@mail.ru)';

CustomPage := CreateCustomPage(wpWelcome, '', '');

// тут вызываю процедуру FormClick выполняющуюся при клике в пустом месте формы (подозреваю, что не правильно...)
WizardForm.OnClick := @FormClick;

KomuEdit := TNewEdit.Create(WizardForm);
with KomuEdit do
begin
Parent := CustomPage.Surface;
SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
Text := ExampleText;
AutoSelect:=False;
Font.Color := clWindowFrame;
OnClick := @OnClick1;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=false;
end;

Вот работающий пример подсказки в TEdit на создаваемой форме, выкладываю, может кому сгодится...
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DisableWelcomePage=yes
DisableDirPage=yes
DisableReadyPage=yes

[ Code]
var
OptionsWindowForm: TSetupForm;
Button, OKButton, CancelButton: TButton;
KomuEdit: TNewEdit;
ExampleText: String;

procedure OnClick1(Sender: TObject); // Процедура выполняющаяся при клике в TEdit
begin
ExampleText:='Введите E-mail получателя (например: user@mail.ru)'; // подсказка - тут всё понятно
begin
if KomuEdit.Text <> '' then begin // Если в TEdit есть текст
if KomuEdit.Font.Color = clWindowFrame then begin // Его цвет серый
if KomuEdit.Text = ExampleText then begin // И текст является подсказкой, то - при клике
KomuEdit.Text := '' // Удаляем тект и очищаем TEdit
KomuEdit.Font.Color := clBlack; // Цвет вводимого далее текста будет черным
end;
end;

if KomuEdit.Text <> '' then begin // Если в TEdit есть текст
if KomuEdit.Font.Color = clWindowFrame then begin // Его цвет серый
if KomuEdit.Text <> ExampleText then begin // И текст не является подсказкой(другой текст), то - при клике в TEdit
KomuEdit.Font.Color := clBlack;; // Цвет имеющегося текста станет черным (типа TEdit стал активным)
end;
end;
end;
end;
end;
end;

procedure FormClick(Sender: TObject); // Процедура выполняющаяся при клике в пустом месте формы
begin
if OptionsWindowForm.Active then // Если клик по форме (форма активна)
begin
if KomuEdit.Text = '' then begin // И в TEdit нет текста, то
KomuEdit.Text := ExampleText; // Текст в TEdit становится подсказкой
KomuEdit.Font.Color := clWindowFrame; // И цвет подсказки серый
OptionsWindowForm.ActiveControl := OKButton;
end;
if KomuEdit.Text <> '' then begin // Если в TEdit есть текст, то
KomuEdit.Font.Color := clWindowFrame; // Цвет его будет серый, так как активна форма, а не TEdit
OptionsWindowForm.ActiveControl := OKButton;
end;
end;
end;

procedure ShowOptionsWindow(Sender: TObject);
begin
OptionsWindowForm := CreateCustomForm();
with OptionsWindowForm do
begin
BorderStyle := bsDialog;
ClientWidth := ScaleX(425);
ClientHeight := ScaleY(265);
Caption := '{#MyAppName} Options';
OnClick := @FormClick;
CenterInsideControl(WizardForm, False);
end;

OKButton := TButton.Create(OptionsWindowForm);
with OKButton do
begin
Parent := OptionsWindowForm;
SetBounds(ScaleX(245),ScaleY(230),ScaleX(80),ScaleY(23));
Caption := SetupMessage(msgButtonOK);
//OnClick := @OptionsOKButtonClick;
end;

CancelButton := TButton.Create(OptionsWindowForm);
with CancelButton do
begin
Parent := OptionsWindowForm;
SetBounds(ScaleX(335),ScaleY(230),ScaleX(80),ScaleY(23));
Caption := SetupMessage(msgButtonCancel);
end;

KomuEdit:= TNewEdit.Create(OptionsWindowForm);
with KomuEdit do
begin
SetBounds(ScaleX(15),ScaleY(25),ScaleX(395),ScaleY(30));
Text:='Введите E-mail получателя (например: user@mail.ru)';
AutoSelect:=False;
Parent:= OptionsWindowForm;
Font.Color:=clWindowFrame;
OnClick := @OnClick1;
end;
OptionsWindowForm.ActiveControl := OKButton;
OptionsWindowForm.ShowModal;
end;

procedure InitializeWizard();
begin
ExampleText:='Введите E-mail получателя (например: user@mail.ru)';

Button := TButton.Create(WizardForm);
with Button do
begin
Parent := WizardForm;
SetBounds(ScaleX(32),ScaleY(327),ScaleX(100),ScaleY(25));
Caption := 'Показать окно';
OnClick :=@ShowOptionsWindow;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=false;
end;
Прошу помочь с первым примером.
 
Последнее редактирование:

Andreo Fadio

Старожил
Нужна ещё одна маленькая помощь. не могу разобраться с WizardForm.ActiveControl. Точнее не пойму, что нужно указать, чтобы при клике курсором в любом свободном месте окна инсталлятора курсор исчезал из TEdit, а активным уже было окно инсталлятора. Подробнее в примере...
Вы пытаетесь вывесить действие на WizardForm не учитывая того что поверх расположены еще объекты страницы такие как:
OuterNotebook и InnerNotebook на которых располагаются другие элементы.

Можно, например, их скрыть именно на той страницы где расположен TEdit
Код:
[Setup]
AppName=MyAppName
AppVersion=1.0.0.0
DefaultDirName={pf}\MyAppName
DisableWelcomePage=yes

[Code]
var
CustomPage: TWizardPage;
KomuEdit: TNewEdit;
ExampleText: String;

procedure OnClick1(Sender: TObject); // Процедура выполняющаяся при клике в TEdit (тут все работает нормально...)
begin
ExampleText:='Введите E-mail получателя (например: user@mail.ru)'; // подсказка - тут всё понятно
begin
if KomuEdit.Text <> '' then begin // Если в TEdit есть текст
if KomuEdit.Font.Color = clWindowFrame then begin // Его цвет серый
if KomuEdit.Text = ExampleText then begin // И текст является подсказкой, то - при клике
KomuEdit.Text := '' // Удаляем тект и очищаем TEdit
KomuEdit.Font.Color := clBlack; // Цвет вводимого далее текста будет черным
end;
end;

if KomuEdit.Text <> '' then begin // Если в TEdit есть текст
if KomuEdit.Font.Color = clWindowFrame then begin // Его цвет серый
if KomuEdit.Text <> ExampleText then begin // И текст не является подсказкой(другой текст), то - при клике в TEdit
KomuEdit.Font.Color := clBlack;; // Цвет имеющегося текста станет черным (типа TEdit стал активным)
end;
end;
end;
end;
end;
end;

procedure FormClick(Sender: TObject); // Процедура выполняющаяся при клике в пустом месте формы (а вот тут проблема...)
begin
// Тут и есть вся проблема. Если указать WizardForm.Active, то все условия что ниже, соблюдаются только при клике
// по WizardForm(нижняя часть окна), а нужно чтобы срабатывало при клике в любом месте окна...
if WizardForm.Active then // так срабатывает если кликнуть в нижней части окна...
// Вобщем условие if WizardForm.Active нужно заменить на другое, чтобы срабатывало при клике в любом месте окна...


begin
if KomuEdit.Text = '' then begin // И в TEdit нет текста, то
KomuEdit.Text := ExampleText; // Текст в TEdit становится подсказкой
KomuEdit.Font.Color := clWindowFrame; // И цвет подсказки серый
WizardForm.ActiveControl := WizardForm.NextButton; // Меняем активный элемент страницы, чтобы убрать курсор из поля TEdit
end;
if KomuEdit.Text <> '' then begin // Если в TEdit есть текст, то
KomuEdit.Font.Color := clWindowFrame; // Цвет его будет серый, так как активна форма, а не TEdit
WizardForm.ActiveControl := WizardForm.NextButton; // Меняем активный элемент страницы, чтобы убрать курсор из поля TEdit
end;
end;
end;

procedure InitializeWizard();
begin
ExampleText:='Введите E-mail получателя (например: user@mail.ru)';

CustomPage := CreateCustomPage(wpWelcome, '', '');

KomuEdit := TNewEdit.Create(WizardForm);
with KomuEdit do
begin
//Меняем страницу расположения
Parent := WizardForm;
SetBounds(ScaleX(24), ScaleY(48), ScaleX(369), ScaleY(21));
Text := ExampleText;
AutoSelect:=False;
Font.Color := clWindowFrame;
OnClick := @OnClick1;
//Скрываем элемент
Hide;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
  CustomPage.ID:
   begin
//Убираем не нужное со страницы и ставим показ нужного(ых) элемента(ов)
    WizardForm.OuterNotebook.Hide;
    WizardForm.InnerNotebook.Hide;
    KomuEdit.Show;
// тут вызываю процедуру FormClick выполняющуюся при клике в пустом месте формы
   WizardForm.OnClick := @FormClick;
  end;
  wpSelectDir:
//Возвращаем назад
   begin
    WizardForm.OuterNotebook.Show;
    WizardForm.InnerNotebook.Show;
    KomuEdit.Hide;
   end;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=false;
end;
 
Последнее редактирование:

Andreo Fadio

Старожил
Теперь всё отлично работает.
Только вызов действия WizardForm.OnClick := @FormClick;
Перенесите в процедуру: procedure CurPageChanged(CurPageID: Integer);
под свою кастомную страницу, чтобы вызов работал только там где надо.

Пример выше изменил с учетом этого момента.
 

El Sanchez

Новичок
По задумке, в поле TNewEdit(а) должна быть полупрозрачная или серая подсказка с примером.
При установке курсора в поле ввода, подсказка должна исчезнуть и далее вводимый текст должен вводиться обычным цветом...
Теперь как оно должно быть на самом деле.
Форматирование (BB-код):
const
  ECM_FIRST       = $1500;
  EM_SETCUEBANNER = ECM_FIRST + 1;

var
  CustomPage: TInputQueryWizardPage;

procedure InitializeWizard();
var
  LText: string;
begin
  CustomPage := CreateInputQueryPage(wpWelcome, '', '', '');
  CustomPage.Add('', False);
  LText := 'Введите текст (например: Текст)';
  SendMessage(CustomPage.Edits[0].Handle, EM_SETCUEBANNER, 0, CastStringToInteger(LText));
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    CustomPage.ID: WizardForm.NextButton.SetFocus;
  end;
end;
 

AlexS

Новичок
El Sanchez, изначально, в поисках решения, попадались мне темы обсуждающие EM_SETCUEBANNER на делфи форумах.
Были у меня попытки применить это в инно, но не получилось, поэтому и пошел другими путями.
Спасибо большое! Таким способом, кода становится на километр меньше.:good:
 
Сверху