gpt4 book ai didi

url - 如何制作仅在特定页面上可见的按钮? (创新设置)

转载 作者:行者123 更新时间:2023-12-04 18:18:16 26 4
gpt4 key购买 nike

我在向导页面中制作了一个按钮。但我只想在此串行表单页面上显示该按钮。现在,该按钮显示在所有向导页面上。我怎样才能让它只显示在串行页面上?

这是我用于串行表单页面的代码:

[Code]
enter code here function SetFocus(hWnd: HWND): HWND;
external 'SetFocus@user32.dll stdcall';
function OpenClipboard(hWndNewOwner: HWND): BOOL;
external 'OpenClipboard@user32.dll stdcall';
function GetClipboardData(uFormat: UINT): THandle;
external 'GetClipboardData@user32.dll stdcall';
function CloseClipboard: BOOL;
external 'CloseClipboard@user32.dll stdcall';
function GlobalLock(hMem: THandle): PAnsiChar;
external 'GlobalLock@kernel32.dll stdcall';
function GlobalUnlock(hMem: THandle): BOOL;
external 'GlobalUnlock@kernel32.dll stdcall';

var
SerialPage: TWizardPage;
SerialEdits: array of TEdit;

const
CF_TEXT = 1;
VK_BACK = 8;
SC_EDITCOUNT = 6;
SC_CHARCOUNT = 5;

function GetClipboardText: string;
var
Data: THandle;
begin
Result := '';
if OpenClipboard(0) then
try
Data := GetClipboardData(CF_TEXT);
if Data <> 0 then
Result := String(GlobalLock(Data));
finally
if Data <> 0 then
GlobalUnlock(Data);
CloseClipboard;
end;
end;

function TryPasteSerialNumber: Boolean;
var
S: string;
I: Integer;
J: Integer;
Delimiter: string;
begin
Result := True;
Delimiter := '-';
S := GetClipboardText;
if Length(S) <> ((SC_EDITCOUNT * SC_CHARCOUNT) +
((SC_EDITCOUNT - 1) * Length(Delimiter))) then
Exit;
for I := 0 to GetArrayLength(SerialEdits) - 1 do
begin
J := (I * SC_CHARCOUNT) + (I * Length(Delimiter)) + 1;
SerialEdits[I].Text := Copy(S, J, SC_CHARCOUNT);
end;
end;

function GetSerialNumber(const ADelimiter: Char): string;
var
I: Integer;
begin
Result := '';
for I := 0 to GetArrayLength(SerialEdits) - 1 do
Result := Result + SerialEdits[I].Text + ADelimiter;
Delete(Result, Length(Result), 1);
end;

procedure OnSerialEditChange(Sender: TObject);
var
CanContinue: Boolean;
begin
CanContinue := GetSerialNumber('-') = 'my serial';
WizardForm.NextButton.Enabled := CanContinue;
end;

procedure OnSerialEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Edit: TEdit;
EditIndex: Integer;
begin
Edit := TEdit(Sender);
EditIndex := Edit.TabOrder - SerialEdits[0].TabOrder;
if (EditIndex = 0) and (Key = Ord('V')) and (Shift = [ssCtrl]) then
begin
if TryPasteSerialNumber then
Key := 0;
end
else
if (Key >= 32) and (Key <= 255) then
begin
if Length(Edit.Text) = SC_CHARCOUNT - 1 then
begin
if EditIndex < GetArrayLength(SerialEdits) - 1 then
SetFocus(SerialEdits[EditIndex + 1].Handle)
else
SetFocus(WizardForm.NextButton.Handle);
end;
end
else
if Key = VK_BACK then
if (EditIndex > 0) and (Edit.Text = '') and (Edit.SelStart = 0) then
SetFocus(SerialEdits[EditIndex - 1].Handle);
end;

procedure CreateSerialNumberPage;
var
I: Integer;
Edit: TEdit;
DescLabel: TLabel;
EditWidth: Integer;
begin
SerialPage := CreateCustomPage(wpWelcome, 'Serial number validation',
'Enter the valid serial number');

DescLabel := TLabel.Create(SerialPage);
DescLabel.Top := 16;
DescLabel.Left := 0;
DescLabel.Parent := SerialPage.Surface;
DescLabel.Caption := 'Enter the valid serial number and continue with the installation...';
DescLabel.Font.Style := [fsBold];

SetArrayLength(SerialEdits, SC_EDITCOUNT);
EditWidth := (SerialPage.SurfaceWidth - ((SC_EDITCOUNT - 1) * 8)) div SC_EDITCOUNT;

for I := 0 to SC_EDITCOUNT - 1 do
begin
Edit := TEdit.Create(SerialPage);
Edit.Top := 40;
Edit.Left := I * (EditWidth + 8);
Edit.Width := EditWidth;
Edit.CharCase := ecUpperCase;
Edit.MaxLength := SC_CHARCOUNT;
Edit.Parent := SerialPage.Surface;
Edit.OnChange := @OnSerialEditChange;
Edit.OnKeyDown := @OnSerialEditKeyDown;
SerialEdits[I] := Edit;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = SerialPage.ID then
WizardForm.NextButton.Enabled := False;
end;

procedure AboutButtonOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExecAsOriginalUser('open', 'http://www.mywebsite.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure CreateAboutButton(ParentForm: TSetupForm; CancelButton: TNewButton);
var
AboutButton: TNewButton;
begin
AboutButton := TNewButton.Create(ParentForm);
AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := '&Get Serial';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := ParentForm;
end;

procedure InitializeWizard;
begin
CreateSerialNumberPage;
CreateAboutButton(WizardForm, WizardForm.CancelButton);
end;

我希望你们能帮助我伙计们!

最佳答案

您已经有一个 CurPageChanged过程中,您可以根据当前页面在此处设置按钮的可见性。当然,您需要将“AboutButton”设为全局变量:

...

var
AboutButton: TNewButton;

procedure CreateAboutButton(ParentForm: TSetupForm; CancelButton: TNewButton);
begin
AboutButton := TNewButton.Create(ParentForm);
...
end;


procedure CurPageChanged(CurPageID: Integer);
begin
...
AboutButton.Visible := CurPageID = SerialPage.ID;
end;

关于url - 如何制作仅在特定页面上可见的按钮? (创新设置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11276951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com