# پایگاه‌های داده > سایر پایگاه‌های داده > Foxpro >  Forms & Form designer

## kia1349

موضوعات مربوط به فرمها و طراحی آن را در این قسمت مطرح کنید

----------


## rezamim

سلام
آیا تابحال دیده اید که در Grid و یا ListBox اگر از فونت Tahoma استفاده کنید سرعت Scroll بسیار پایین می  آید؟ درحالی که اگر از فونت Arial استفاده کنید سرعت بالاتر است؟البته متاسفانه فونت Tahoma زیباتر است.
میخواستم بدانم آیا من درست احساس میکنم و یا نه؟
ممنون از نظراتی که میدهید.

----------


## kia1349

چک میکنیم
موضوع جالبیه

----------


## javad_hosseiny

در مورد حرف گوش نکردن righttoleft=.t. ‌در editbox  و یا آبجکت های مختلف در فرم به هنگام تایپ فارسی آن هم فقط در محیط ویندوز اکس پی آیا راه حلی هست؟ چون به هنگام تایپ فارسی مطلب از وسط و آن هم بصورت برعکس از راست به چپ تراز می شود؟

----------


## javad_hosseiny

در مورد تایپ اتوماتیک فارسی (کد api  که برای زدن کلید alt+shif)  بود که فقط در ویندوز 98 کار می کرد آیا برای محیط ویندوز اکس پی راه حلی پیدا شد ؟!!  
آیا برنامه ، سورس، کامپونت و یا ... مشابه کامپونتهای دلفی برای این کار در محیط ویژوال فاکس پرو تاکنون ایجاد نشده (البته منظورم برنامه بدردنخوری مثل پارس پندار نمی باشد)

----------


## javad_hosseiny

سؤال دیگر؟ : حجم انبوهی از اطلاعات را می خواهم در فرمی بصورت لیستی نمایش دهم اما نکته ظریف کار آن است که هر رکورد خود ممکن است چندین سر باشد (یعنی اطلاعات در فیلد memo) می باشد چیزی شبیه richedit ولی با قابلیت اتصال به table (چرا که با دیگر فیلدهای این رکورد نیز در آن فرم کار دارم) به نظر شما بهترین راه حل کدام است؟
1 - در مورد استفاده از list به علت گوش نکردن righttoleft=.t. و نمایش مطالب در سمت چپ لیست و یا حتی در صورت حل این مشکل نمایش چند سطری بودن را چه کنم؟
2 - در مورد استفاده از grid که اولا فیلد memo را نمایش نمی دهد (بصورت جدولی) و ثانیا در صورتی که اطلاعات این table  را به جدول دیگری که بصورت فیلد کاراکتری (80 حرفی مثلا) منتقل کنیم تا بصورت لیستی ببنیم مشکل تراز بندی این جدول در فرم های مختلف را داریم؟ به نظر شما برای حل این مشکل چکنیم؟

----------


## rezaTavak

سلام

در مورد سوال اول جای دیگه جواب داده ام. 
در مورد سوال دوم هم به جای عدد 401 که کد عربی است از کد 429 استفاده کنید. منظورم تابع LoadKeyboardLayout است. یعنی با استفاده از  تابع OS اگر بالاتر از 4 بود یعنی 2000 و ایکس پی عدد شما باید عوض شود.

----------


## binyaz2003

> در مورد حرف گوش نکردن righttoleft=.t. ‌در editbox و


با سلام
اولا که شما باید فارسی ویندوز اکس پی تون درست باشه یک جستجو تو این بخش مطلب رو کامل بچه ها توضیح دادن
دوما شما علاوه بر righttoleft  باید alignment  رو هم right  قرار بدین تا همه چیز درست بشه



> در مورد تایپ اتوماتیک فارسی


یک کد api دیگه هم برای xp  هست که برای کامل بودن برنامه باید از هر دو استفاده بشه



> مشکل نمایش چند سطری بودن را چه کنم؟


خاصیت column رو به عدد دلخواه تغییر بدین
در مورد سوال دوم بیشتر توضیح بدین

----------


## javad_hosseiny

با سلام
آیا می تونید در مورد کد api دوم کمی بیشتر توضیح بدهید
در مورد نمایش چند سطری که گفته اید که خاصیت column را به عدد دلخواه تغییر دهید منظور چه می باشد؟ و منظور کدام column می باشد columncount, columnline, columnwidths

----------


## binyaz2003

> آیا می تونید در مورد کد api دوم کمی بیشتر توضیح بدهید



Declare Integer ActivateKeyboardLayout In win32api Integer,Integer
DECLARE LONG LoadKeyboardLayout IN WIN32API STRING pwszKLID,INTEGER Flags 
*gotfocus
ActivateKeyboardLayout&#40;1025,0&#41;
lnRetCode = LoadKeyboardLayout&#40;'00000429', 1 &#41;
*lostfocus
ActivateKeyboardLayout&#40;1033,8&#41;
lnRetCode = LoadKeyboardLayout&#40;'00000409', 1&#41;

اما در مورد دوم من یک اشتباه کردم فکر کردم شما چند ستونی منظورتون هست
اگر بیشتر توضیح بدین بهتره!برای نمایش سطری لیست مشکلی نداره  :گیج:

----------


## kia1349

با توابع api ورژن ویندوز را چک کنید و اگر ویندوز 9x داشتید از activatekeybordlayout و اگر ویندوز سری nt داشتید از loadkeyboardlayout استفاده کنید 
مطالعه بخشهای دیگر این فروم رو جدا به شما توصیه میکنم حتی اگه تکرار این مطالب برای خود ما هم یادآوری کننده باشه

----------


## javad_hosseiny

منظورم این است که مثلا اطلاعات ما در فیلد memo است و به طور نمونه در یک رکورد این اطلاعات تقریبا 80 کاراکتر (یعنی حدودا یک سطر) و در یک رکورد دیگر 500 کاراکتر (یعنی حدودا سه سطر) می باشد حالا ما می خواهیم این اطلاعات را به صورت لیستی (listbox, or grid) نمایش دهیم ولی آن object که می خواهیم برای این منظور استفاده کنیم اطلاعات را بصورت سطری (تراز بندی) کند و زیر هم نمایش دهد (مثل موردrichedit) مناسب است ولی با table لینک نیست و ثانیا اول کار باید آن را مقداردهی کنیم ولی برای نمایش مورد مناسبی هست (توضیح کامل)   حال درصورت راهنمای متشکر خواهم شد

----------


## binyaz2003

همیشه چیزهایی که جلو چشممون هست رو نمی بینملبته منظورم خودم هست
شما باید بعد از اونیکه گرید تون رو ساختین یکی از این 2 کار رو انجام بدی:
1بیلدر گرید رو اجرا و در صفحه سوم فیلدی که memo هست رو یک کنترل edit براش انتخاب کنید .همین
2-همون کار بالا رو خودتان انجام بدین به این ترتیب که گرید رو ادیت کنید و به اون ستون مخصوص یک کنترل edit  اضافه کنید بعد به قسمت data ستون مورد نظر برید و currentcontrol رو edit  انتخاب و spares=.f. رو تعیین کنید . باز هم همین
 :sunglass:

----------


## javad_hosseiny

با تشکر فراوان از آقای بی نیاز در رابطه با راهنمای خوبشان 
سوال؟ چرا در combobox  بعضا وقتی به پایین لیست که آمدیم از طریق خط بار (scrool) نمی توان بالا رفت (یعنی از طریق کلیدهای صفحه کلید بالا می رود) ولی از طریق فلش آیکون رو به بالا و یا گرفتن خط بار و حرکت به سمت بالا این کار انجام نمی شود (در vfp6,vfp7) این مشکل وجود دارد؟

----------


## binyaz2003

منم این مشکل رو دارم.زیادم سخت نگیریرد آقا جواد :)

----------


## javad_hosseiny

آره من سخت نگرفتم بی نیاز جون مشکل اینجاست که برنامه را تحویل مشتری دادم این ایراد مشتری به من وارد کرده و چون از اول می گفت که برنامه را با دلفی بنویسم و من به زور متقاعدش کردم که با vfp بهتر است (البته من میانم با دلفی بد نیست ولی چون سرعت عمل در دلفی نسبت به فاکس کمتر است من شخصا فاکس را بهتر می پسندم) حالا ایشان هی اعتراض می کند که اگه با دلفی می نوشتی بهتر بود؟

----------


## javad_hosseiny

اما سوال جدید ؟ 
آیا تاکنون با این مشکل در مورد editbox برخورد کرده اید که می خواهیم متن تایپی بصورت افقی اسکرول (پیمایش) شود ولی نمی شود؟ (البته برای افزایش طول متن تایپی از طریق value=space(80) مثلا) این امکان را داده ام اما وقتی تایپ می کنم تا محدوده نمایش خود editbox درست است ولی وقتی خارج می شود متن تایپ می شود ولی نمایش داده نمی شود اگر برخورد کرده اید ممنون می شوم که پاسخ دهید؟
و سوال دوم اینکه:
آیا ocx  یا dll و یا از طریق برنامه نویسی امکان این است که بتوانیم در listbox ها و موردهای مشابه از تصویر به جای نوار پیمایش و یا دو فلش رو به بالا و پایین آن استفاده کرده مثل برنامه های آموزشی در محیط دلفی و ...

----------


## kia1349

اولا برنامه باید کار مشتری رو راه بندازه و اینکه با چه زبانی تهیه شده اصلا به مشتری ربطی نداره(یکی از قوانین مندرج در مبحث uml)
دوما ادیت باکس بزاس اسکرول عمودی مناسبه و نه افقی
سوما فاکس یه برنامه دیتابیسه و اگر کسی دنباله زیبائی ظاهری برای فرمهاشه باید بره سراغ زبون دیگه ای که اونوقت به خاطر همون ظاهر قشنگش سرعت خوبی توی پروسه دیتابیسها نداره

----------


## rezamim

:موفق:

----------


## javad_hosseiny

با تشکر از مدیر بخش در رابطه با توضیحاتشان اما من هنوز پاسخ خود در رابطه با اسکرول افقی را نگرفتم آیا object دیگری به این منظور وجود ندارد ؟ !! (یا توسط کدنویسی api)

----------


## binyaz2003

می تونی از richtextbox  استفاده کنید

----------


## javad_hosseiny

بی نیاز جان اگر منظورت استفاده از Ole (active x)ها می باشد نه من ترجیح می دهم از خود textbox فاکس استفاده کنم آیا برای خود این Object راهی وجود دارد که بتواند بصورت افقی اسکرول کند ( و یا از ابزار خود فاکس راهی برای نمایش یک متن دراز (یعنی یک سطری ولی مثلا 255 کاراکتر) در یک اندازه کوچک (یعنی یه محیط کوچک) وجود دارد؟ با تشکر

----------


## binyaz2003

برای 255 کاراکتر خود تکست فاکس خوبه اما اسکرول نداره
چیز دیگه ای نمی دونم :oops:

----------


## javad_hosseiny

ممنون و متشکر 
در رابطه با عوض کردن منوی ok,yes,no,cancel,... در دستور messagebox (تغییر به عبارت فارسی) کار کرده اید؟ ممنون

----------


## rezaTavak

سلام

MessageBox یک فرم ساده است. درست کردن آن با توابع و فارسی کردن یکی مثل آن کاری ندارد. اما یک مشکل اینه که اگه از چیزی جز  MessageBox استفاده کنید به هنگام رخدادن خطا (استثناها) برنامه شما ممکنه درست کار نکنه. من توی یکی از برنامه هام از چیز فارسی شبیه اون استفاده کردم اما همین باعث شد Ok و... را به خطای برنامه ترجیح بدم. بالاخره هر کی میدونه Ok,Cancel و... چیه. اصلا کاربرای من از اینکه MessageBox اونها Ok باشه ناراضی نیستند.

----------


## binyaz2003

سلام
من یک دونه دارم که از foxite گرفتم و همچین فارسیش کردم ولی الان 3 شب نخوابیدم باید بگردم پیداش کنم براتون بزارم



> هنگام رخدادن خطا (استثناها) برنامه


برای این مشکل کافیه تو برنامه main یک دستور on error do .... بنویسید تا برنامه نمایش خطای شما باز شه

----------


## javad_hosseiny

از اقا رضا ممنون و متشکرم ولی خیلی وقت ها اگر بدنبال مشابه سازی باشیم می توانیم آن را ایجاد کنیم اما تاکید بنده بران است که آیا می توان از خود ان دستور یا ابزار به نحو صحیح تری استفاده کرد یا نه (مثلا در مورد سوال های قبلی بنده (مثل مشکل بالا رفتن اسکرول در combobox و یا استفاده از خود listbox (که درصورت تنظیم یونی کد به زبان عربی راست چین نمایش می دهد بجای listbox مربوط به ole مایکروسافت و... موردهای دیگر ) به هر حال از راهنمای شما نیز متشکرم و 
از اقای بی نیاز نیز ممنون هستم من سایت مورد نظر را نگاه کردم ولی کد موردنظر را نیافتم درصورت امکان یا لینک کامل آن را بدهید و یا برسرفرصت کد آن را در این قسمت قرار دهید

----------


## javad_hosseiny

آیا برای راست به چپ کردن در ابزار richedit و treeview  کدی هست ؟ ::نوشتن::

----------


## binyaz2003

اینم تابع پیغام فارسی
فقط باید به جای messagebox  بنویسید msgbox_ بقیه پارامترها دقیقا همونهاست

----------


## javad_hosseiny

ممنون از برنامه قشنگ و زیبایتان

----------


## binyaz2003

خواهش می کنم اما من گفته بودم خودم ننوشتم :wink:

----------


## پدرخوانده

برای فراخوانی یک فرم در داخل فرم دیگر برای بار دوم از پارامتر show بعد از نام فرم استفاده می کنم ولیکن برخی موارد جواب نمی دهد (یعنی بعضا درست و بعضا خطا می گیرد)
(توضیح واضح تر : تصور کن سه فرم که در هر کدام لینک به دوم فرم دیگر موجود است با استفاده از متغیر تشخیص می دهیم که فرم دوم آیا برای بار اول است که اجرا می شود یا دوم؟ برای بار اول خوب با استفاده از دستور do form آن را صدا می زنیم و برای بار دوم به بعد از show آن فرم استفاده می کنیم ولیکن پیغام خطای عدم شناسایی متغیر (نام فرم ) را می دهد) 
(البته از راه حل public کردن نام فرم نمی خواهم استفاده کنم آیا راه حل دیگری هست؟!)

----------


## rezaTavak

با استفاده از FORMSET هم میشه.

----------


## شاگرد آرام

سلام
*برای نمایش فیلد ممو در grid*
شما باید کالومن مورد نظر را ادیت کرده در هنگام ادیت یک editbox روس آن drag کنید
بعد اگر در لیست کنترل ها نگاه کنید می بینید زیر مالومن مورد نظر دو کنترل textbox و editbox وجود دارد
حالا باید textbox را انتخاب کرده و روی فرم کلیئ delete را بزنید تا فقط editbox زیر کالومن بماند
حالا اگر نگاه کنید مشکا حل شده

----------


## علی کلاهدوزان

یه نفر که کار کرده به من بگه از چه روشی برای استفاده از چند فرم که اشیای همدیگه رو بشناسند استفاده می کنه و چطوری مثلا توی یه صفحه فاکتور می خواهیم لیست اجناس توی یه فرم دیگه باز بشه . 

متشکرم و منتظر

----------


## rezaTavak

سلام

شما باید اگر می خواهید که فرم شما در تمام فاکس پرو شناخته شده باشد این فرم را به اسمی عمومی معرفی کنید مثلا در هنگامی که در Init بنویسید 


public frmInput
frmInput = THIS

فرم شما در تمام فاکس پرو شناخته شده و مثلا برای تغییر عنوان آن در هر جا می توانید از

frmInput.Caption

استفاده کنید.


توجه کنید که frmInput در اینجا یک OBJECT است!

----------


## علی کلاهدوزان

با تشکر اگه میشه جواب منه یمی از عزیزان بده

----------


## علی کلاهدوزان

چرا بعضی وقتها فرمهایی که از Public در آنها استفاده شده یا کلا متغیرهای public را ایراد illigal redefine میده گاهی نمیده

----------


## binyaz2003

من تا حالا خیلی استفاده کردم و مشکلی نداشتم احتمالا اشکال از یک جای دیگه است 
declare integer MessageBeep in user32 integer
شاید بدرد بخوره

----------


## rahro

ببخشید من فکر میکنم بخاطر این باشه که شما متغیر مربوطه را در بالاترین سطح تعریف نکردید!!

----------


## علی کلاهدوزان

آقا حل شد . فقط یه مشکل دیگه . می خوام سیستم از بوق خود کیس استفاده کنه نه اسپیکر سیستم چیکار کنم ؟؟؟؟؟؟

----------


## علی کلاهدوزان

میشه یه  نفر یه نمونه برنامه برای من بفرسته (سورس) تا من یه خورده از روش چیز یاد بگیرم پول هم بخواد بهش می دم

----------


## kia1349

برات توی مباحث متفرقه سورس گذاشتم اگر فقط توی یک بخش مرتبط دنبال سوال و جوابت باشی خیلی بهتره

----------


## علی کلاهدوزان

دست شما درد نکنه ولی منظورم سورس یه برنامه کامله اگه لطف . من بعضی جاها گیر دارم از شما هم مخ تر پیدا نکردم یه کم منو تحمل کنید ثواب داره .

----------


## naghdi

با درود 
نمیدونم سوالم تا چه اندازی ابتدایی هست
من با فیلتر گذاری روی رکوردهایی که از  یک شرط خاص برخوردار باشد و نمایش آنها در یک grid
دچار مشکل شدم

----------


## binyaz2003

مشکل دقیق شما چیه؟

----------


## naghdi

مشکل اینجا است که وقتی از فرمان فیلتر برای جداسازی رکوردهایی که به طور مثال 
set filter to code=10001
 ولی  Error 1881 و میدهد

----------


## rezaTavak

سلام

این خطا زمانی رخ میده که شما یک مشخه یا متد یا ... قابل بازگذاری نباشه. شاید با این فیلتر شما همچین مشکلی پیش میاد

----------


## rezamim

FilterString = " Code = 10001"
SET FILTER TO &FilterString

فیلتر رو به این شکل استفاده کن ببین مشکل حل میشه یا نه

----------


## rezaTavak

سلام

از dataenvironment  هم می تونی فیلتر کنی.

----------

