PDA

View Full Version : استفاده از کلید Alt در فرم



Mohammad S
پنج شنبه 26 آذر 1383, 10:31 صبح
در فرم About دلفی اگر کلید Alt را به همراه مثلا کلمه Team وارد کنید اسامی گروه سازنده دلفی نمایش داده می شود. سوال من این است که چطور می توانم پس از فعال کردن گزینه KeyPreview در فرم، کلید ALT را هم تشخیص دهم یا حتی مثلا کلید Shift به همراه یک کلمه.


با تشکر :wink:

hps
پنج شنبه 26 آذر 1383, 11:03 صبح
از پارامتر Shift در رویدادهاى OnKeyDown یا OnKeyUp مى‌تونى استفاده کنى، یا از رویداد OnShortcut.

YASNA
پنج شنبه 26 آذر 1383, 18:00 عصر
در قسمت OnKeyDown میتوانی از این کد برای کنترل استفاده کنید

If (Shift=[ssCtrl] ) And (Key=VK_UP) Then
Begin
End;

Mahdi_S_T
جمعه 27 آذر 1383, 09:15 صبح
این هم تقریبا شبیه کد بالایی است


if (Key=Ord('T')) and (ssAlt in Shift) then
begin
key:=0;
کد مورد نظر
end

FirstLine
جمعه 27 آذر 1383, 09:48 صبح
با سلام
حالا اگه بخواهیم بر اساس اینکه کاربر کلید Alt را گرفته و کلمه Test را تایپ کند یک پیغام داده شود چجوری باید کد بالا را تنظیم کرد؟
با تشکر

Mahdi_S_T
جمعه 27 آذر 1383, 10:21 صبح
احتمالا بتوانی با یک Edit که مخفی است این کار را انجام بدهی یعنی یه And اضافه می کنی و چک کنی که اگه شرط


Edit.text:='Test';

برقرار است کد انجام شود :موفق:

hps
جمعه 27 آذر 1383, 12:09 عصر
این کد امتحان نشده، ولى اون چیزى که مى‌خواى باید یه همچین چیزى باشه.



// Global Variable
var HiddenText: AnsiString = '';

// OnKeyDown Event (e.g procedure SomeForm.OnKeyDown)
if ssAlt in Shift then
HiddenText := HiddenText + UpCase(AnsiChar(Key));
else
HiddenText := '';
if AnsiSameStr(HiddenText, 'TEST') then
// Show Message.
// ~OnKeyDown Event

Mohammad S
جمعه 27 آذر 1383, 13:35 عصر
کدی که hps ارائه دادند، جوابگو نیست.

البته کد زیر هم کار می کند ولی برای یک حرف:

if ((ssAlt in Shift) and (Chr(key)='A')) then
showmessage('A');

من با کدی که نوشتم راه حل آن را پیدا کردم ولی 1 مشکل: اصدای بیپ از اسپیکر شنیده می شود.

کد مورد نظر:


public
{ Public declarations }
ch:String;

c:Integer;
----
----
----
procedure TForm1.FormActivate(Sender: TObject);
begin
ch:='mohammad';
c:=1;
end;
---
---
---
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((ssAlt in Shift) and (AnsiChar(Key)=(UpCase(ch[c]))) and (c<=length(ch)))then
c:=c+1
else
c:=1;
if c=length(ch)+1 then
begin
showmessage('True');
c:=1;
end;
end;

با تشکر

Mahdi_S_T
جمعه 27 آذر 1383, 16:58 عصر
با استفاده از کد زیر احتمالا صدای بیپ برطرف شود یعنی بعد از فشار هر دکمه کد زیر اجرا شود :


key:=0;

Mohammad S
شنبه 28 آذر 1383, 00:16 صبح
امتحان کرده بودم قبلا ولی باز هم قطع نشد :(

مهدی کرامتی
شنبه 28 آذر 1383, 00:59 صبح
این رو امتحان کنید:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
public
HiddenText: String;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssAlt in Shift) and (Char(Key) in ['A'..'Z','a'..'z']) then
HiddenText := HiddenText + UpCase(Char(Key))
else
HiddenText := '';

if AnsiSameStr(HiddenText, 'TEAM') then
begin
ShowMessage('Hidden Message');
HiddenText := '';
end;
end;

end.

نمونه برنامه ضمیمه شده است.

برای تست در حین نگه داشتن کلید Alt کلمه Team را تایپ کنید.

Mohammad S
شنبه 28 آذر 1383, 01:13 صبح
با تشکر از شما جناب آقای کرامتی
کدی که من نوشته بودم هم همین کار را انجام می داد. :oops:
چه با کدی که شما نوشته اید و چه با کدی که خودم نوشتم، صدای بیپ از اسپیکر شنیده می شود. لطفا برای این مشکل راهی بیابید.

با تشکر :wink: