باسلام
میخواهیم توی برنامه (توی فرمها)ازکلیدهای فانکشنال (f1,f2,f3,...) استفاده کنیم. مثلاً روی یک دکمه کپشن f2رابنویسیم که اگرکاربرکلیدf2را فشارداد، مثلاض تغییرات ذخیره بشن.یا مثلاض f3برای جستجو درفرمها و...
دوستان لطفاً راهنمایی بفرمایید.
باسلام
میخواهیم توی برنامه (توی فرمها)ازکلیدهای فانکشنال (f1,f2,f3,...) استفاده کنیم. مثلاً روی یک دکمه کپشن f2رابنویسیم که اگرکاربرکلیدf2را فشارداد، مثلاض تغییرات ذخیره بشن.یا مثلاض f3برای جستجو درفرمها و...
دوستان لطفاً راهنمایی بفرمایید.
راه ساده ش اینه که برای هر دکمه یک Action ایجاد کنید ( کامپوننت ActionList ) و به اون Action کلید میانبر دلخواه رو نسبت بدید
راه دیگه اینه که خاصیت KeyPreview مربوط به فرم رو True کنید و در رویداد OnKeyPress مربوط به فرم، کلید فشرده شده رو چک کنید و متناسب با اون عملیات مورد نظر رو انجام بدید
اگر قصد دارید کلیدها رو در سطح کل برنامه بررسی کنید، از کامپوننت TApplicationEvent استفاده کنید و در رویداد OnMessage این کامپوننت کلید ها رو چک کنید و عملیات مورد نظر رو انجام بدید
مثال :
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_KEYDOWN then
begin
case Msg.wParam of
VK_F1 : ...;
VK_F2 : ...;
VK_F3 : ...;
...
end;
end;
end;
یکی دیگه از راهها که دست شما رو برای تغییر موردی هم باز می گذاره استفاده از MasterForm هست.
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/
نرم افزار پخش مویرگی
سلام، ضمن تشکرمجددازمدیران خوب بخش،
منظورازاینکه کلیدهای تابعی هم پوشانی نباشند این هست که درسرتاسر (تمامی فرمها) مثلاً کلید(f3) کار سرچ رو انجام بده.البته این برداشت من هست.
دوستان اگرنظری دارید، بفرمایید.
یک راهش همون استفاده از ApplicationEvent هست البته روی فرم اصلی تون یا هر فرمی که از اول پروژه تا آخر اون حاضر باشه، مهم نیست نمایش داده می شه یا نه. مثلا روی دیتاماژول هم می تونید بگذارید.
راه بهتر استفاده از سیستم مسترفرم هست که همه فرم هاتون رو از یکی از فرم های پروژه مشتق کنید و در فرم والد رویداد ها رو کنترل کنید. به این ترتیب می تونید بعضی از فرم ها رو استثنا کنید یا رفتارش رو در قبال کلید مورد نظر تغییر بدید یا کلا آف کنید.
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/
نرم افزار پخش مویرگی
باسلام،
کدزیررابرای کلید(f1)درنظرگرفته ام ولی به درستی کارنمی کنه.دراصل بایدبره وآخرین رکوردراپیداکنه ویکی بهش اضافه کنه و(Adotable)رو (Insert)کنه ولی فقط آخرین رکورد رانمایش میده.
البته همین کدرابرای رویداد(On Click)همین باتن نوشته ام که به درستی آخرین رکوردرا میگیره ویکی بهش اضافه میکنه وجدول را(insert)میکنه. ممنون میشم اگه راهنمایی بفرمایید!
procedure TForm5.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
//insert Record
var a:integer;
begin
if Msg.message = WM_KEYDOWN then
begin
case msg.wParam of
VK_F1:
begin
ADOTable1.Active :=true;
if ADOTable1.isempty then
ADOTable1.fieldbyname('code').asinteger := 1
else
begin
ADOTable1.last;
a := ADOTable1.fieldbyname('code').asinteger;
ADOTable1.insert;
ADOTable1.fieldbyname('code').asinteger := a + 1;
کدتون ایراد داره.
بعد از چک خالی بودن هنوز در مود اینسرت نرفتید دارید فیلد رو مقدار می دید.
از طرفی مطمئنید که پست رو هم گذاشتید؟
اگر بله، کد کامل رو بگذار بررسی کنم.
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/
نرم افزار پخش مویرگی
کدمربوط به (On Click) باتن:
procedure TForm5.BitBtn1Click(Sender: TObject);
var a:integer;
begin
ADOTable1.Active :=true;
if ADOTable1.isempty then
ADOTable1.fieldbyname('code').asinteger := 1
else
begin
ADOTable1.last;
a := ADOTable1.fieldbyname('code').asinteger;
ADOTable1.insert;
ADOTable1.fieldbyname('code').asinteger := a + 1;
BitBtn2.Enabled :=true;
DBEdit1.Enabled :=true;
DBEdit1.ReadOnly :=false;
DBEdit2.Enabled :=true;
DBEdit2.SetFocus ;
DBEdit3.Enabled :=true;
DBEdit4.Enabled :=true;
DBEdit5.Enabled :=true;
DBEdit6.Enabled :=true;
DBEdit7.Enabled :=true;
DBEdit8.Enabled :=true;
DBEdit9.Enabled :=true;
DBEdit10.Enabled :=true;
DBEdit2.ReadOnly :=false;
DBEdit3.ReadOnly :=false;
DBEdit4.ReadOnly :=false;
DBEdit5.ReadOnly :=false;
DBEdit6.ReadOnly :=false;
DBEdit7.ReadOnly :=false;
DBEdit8.ReadOnly :=false;
DBEdit9.ReadOnly :=false;
DBEdit10.ReadOnly :=false;
end;
end;
کدمربوط به کلید(F1)
procedure TForm5.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
//insert Record
var a:integer;
begin
if Msg.message = WM_KEYDOWN then
begin
case msg.wParam of
VK_F1:
begin
ADOTable1.Active :=true;
ADOTable1.Insert;
if ADOTable1.isempty then
ADOTable1.fieldbyname('code').asinteger := 1
else
begin
ADOTable1.last;
a := ADOTable1.fieldbyname('code').asinteger;
ADOTable1.insert;
ADOTable1.fieldbyname('code').asinteger := a + 1;
BitBtn2.Enabled :=true;
DBEdit1.Enabled :=true;
DBEdit1.ReadOnly :=false;
DBEdit2.Enabled :=true;
DBEdit2.SetFocus ;
DBEdit3.Enabled :=true;
DBEdit4.Enabled :=true;
DBEdit5.Enabled :=true;
DBEdit6.Enabled :=true;
DBEdit7.Enabled :=true;
DBEdit8.Enabled :=true;
DBEdit9.Enabled :=true;
DBEdit10.Enabled :=true;
DBEdit2.ReadOnly :=false;
DBEdit3.ReadOnly :=false;
DBEdit4.ReadOnly :=false;
DBEdit5.ReadOnly :=false;
DBEdit6.ReadOnly :=false;
DBEdit7.ReadOnly :=false;
DBEdit8.ReadOnly :=false;
DBEdit9.ReadOnly :=false;
DBEdit10.ReadOnly :=false;
البته الان متوجه شدم، بااینکه 4مشتری توی جدول دارم، وبایدکدجدیدرااز5شروع کنه حتی باکلیک باتن هم میره وکدجدیدرا(3)نشون میده.
خروجی شما سورت شده؟
وقتی که اشکال پیش میاد در گرید مربوطه روی چه ردیفی قرار دارید؟ مثلا روی ردیف 4 هستید ولی به جای 5 عدد 3 پیشنهاد می شه؟
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/
نرم افزار پخش مویرگی
این مشکل به استفاده از Button یا کلیدهای F مربوط نمیشه
...
در کد اولی که قرار دادید، اگر جدول خالی باشه، چیزی درج نمیشه، چون بعد از شرط isEmpty جدول به حالت Insert نرفته، باید قبل از مقدار دهی به فیلد، جدول رو به حالت Insert یا Edit ببرید
در کد دوم، Insert رو بالای شرط قرار دادید، اگر شرط برقرار نباشه یعنی جدول خالی نباشه، دوباره به مد Insert میره و یا در حالتی که در Insert هست، دستور Last اجرا میشه، Insert باید درون شرط isEmpty قرار بگیره
مورد دیگه اینکه در کدهای بالا عمل Post انجام نمیشه
نکته مهم اینکه باید جدول رو بر اساس فیلد Code مرتب سازی صعودی کنید تا فیلد آخر بیشترین مقدار Code رو داشته باشه، مثال :
ADOTable1.IndexFieldNames = 'Code ASC'