mbshareat
شنبه 24 دی 1401, 16:21 عصر
سلام علیکم
من نیاز به یک پنجره پیغام دارم که در اون یک متن رو نشون بدم که یک عبارت تکرار شده در اون رنگی هست.
مثلا عبارت (ایاک نعبد و ایاک نستعین) رو نشون میده و اولین (ایاک) قرمز هست و دومی آبی . تا اینجا رو انجام دادم. حالا میخوام وقتی کاربر کلید خاصی رو فشار داد، مورد بعدی از عبارت رنگی قرمز بشه(ایاک دوم).
برای این کار باید رویداد فشار کلید برای پنجره پیغام که شکلش هم توسط کل طراحی میشه بذارم.
فکر کردم شاید چنین کدی جواب بده ولی کار نکرد:
TForm2 = class(TForm)
private
procedure MyKeyPress(Sender: TObject; var Key: Char);
End;
..
Procedure TForm2.MyKeyPress(Sender: TObject; var Key: Char);
begin
If Key='.' then
Begin
ShowMessage(IntToStr(1));
End;
If Key=',' then
Begin
ShowMessage(IntToStr(12));
End;
end;
..
procedure ColorMsg2(....);
var
Form2:TForm2;
Begin
..
Form2:=TForm2.Create(nil);
Form.OnKeyPress:=Form2.MyKeyPress;
..
End;
وارد جزئیات نمیشم. فقط اینکه اسم پنجره پیغام که با برنامه ساخته میشه، Form هست.
به طور کلی سوالم این هست که چطور میشه formKeyPress یک پنجره که توسط برنامه ساخته شده، تنظیم کرد که به کلید خاصی حساس باشه و کار خاصی بکنه.
یک کد نسبتا ساده برای ساخت پنجره پیغام اینه:
Procedure Msg(ACaption, APrompt: string);
var
Form: TForm;
Prompt: TLabel;
begin
Form := TForm.Create(Application);
with Form do
try
BorderStyle := bsDialog;
Caption := ' '+ACaption;
Width :=400 ;
Height := 130;
Position := poScreenCenter;
FormStyle:=fsStayOnTop;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := APrompt;
AutoSize:=False;
SetBounds(10,10, 370,50);
WordWrap := True;
BidiMode:=bdRightToLeft;
end;
with TButton.Create(Form) do
begin
Parent := Form;
Caption := 'Ok!';
Default := True;
ModalResult := mrOk;
SetBounds(150,50, 100,35);
end;
SetForeGroundWindow(Form.Handle);
ShowModal;
finally
Form.Free;
end;
end;
اگر جواب این سوال رو بگیرم تازه میمونه اینکه چطور به پنجره بگم مورد دوم عبارت رو قرمز کن؟ چون متن رو در یک Image مینویسم!!!
من نیاز به یک پنجره پیغام دارم که در اون یک متن رو نشون بدم که یک عبارت تکرار شده در اون رنگی هست.
مثلا عبارت (ایاک نعبد و ایاک نستعین) رو نشون میده و اولین (ایاک) قرمز هست و دومی آبی . تا اینجا رو انجام دادم. حالا میخوام وقتی کاربر کلید خاصی رو فشار داد، مورد بعدی از عبارت رنگی قرمز بشه(ایاک دوم).
برای این کار باید رویداد فشار کلید برای پنجره پیغام که شکلش هم توسط کل طراحی میشه بذارم.
فکر کردم شاید چنین کدی جواب بده ولی کار نکرد:
TForm2 = class(TForm)
private
procedure MyKeyPress(Sender: TObject; var Key: Char);
End;
..
Procedure TForm2.MyKeyPress(Sender: TObject; var Key: Char);
begin
If Key='.' then
Begin
ShowMessage(IntToStr(1));
End;
If Key=',' then
Begin
ShowMessage(IntToStr(12));
End;
end;
..
procedure ColorMsg2(....);
var
Form2:TForm2;
Begin
..
Form2:=TForm2.Create(nil);
Form.OnKeyPress:=Form2.MyKeyPress;
..
End;
وارد جزئیات نمیشم. فقط اینکه اسم پنجره پیغام که با برنامه ساخته میشه، Form هست.
به طور کلی سوالم این هست که چطور میشه formKeyPress یک پنجره که توسط برنامه ساخته شده، تنظیم کرد که به کلید خاصی حساس باشه و کار خاصی بکنه.
یک کد نسبتا ساده برای ساخت پنجره پیغام اینه:
Procedure Msg(ACaption, APrompt: string);
var
Form: TForm;
Prompt: TLabel;
begin
Form := TForm.Create(Application);
with Form do
try
BorderStyle := bsDialog;
Caption := ' '+ACaption;
Width :=400 ;
Height := 130;
Position := poScreenCenter;
FormStyle:=fsStayOnTop;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := APrompt;
AutoSize:=False;
SetBounds(10,10, 370,50);
WordWrap := True;
BidiMode:=bdRightToLeft;
end;
with TButton.Create(Form) do
begin
Parent := Form;
Caption := 'Ok!';
Default := True;
ModalResult := mrOk;
SetBounds(150,50, 100,35);
end;
SetForeGroundWindow(Form.Handle);
ShowModal;
finally
Form.Free;
end;
end;
اگر جواب این سوال رو بگیرم تازه میمونه اینکه چطور به پنجره بگم مورد دوم عبارت رو قرمز کن؟ چون متن رو در یک Image مینویسم!!!