View Full Version : متغییرهای عمومی و روال های عمومی
دنی کوئیل
پنج شنبه 03 آذر 1384, 18:56 عصر
به این کد که در ویژوال نوشتم خوب دقت کنید
و بگوئید معادل آن در دلفی چگونه است
Dim StrA As String ' در قسمت جنرال تعریف کرده ام 'متغییر عمومی
Public Sub Test() 'روال عمومی
MsgBox StrA
End Sub
Private Sub Command1_Click()
StrA = "Dany" ' مقدار دهی متغییر
Test 'صدا کردن روال
End Sub
هدف این برنامه نمایش پیغام متغییر StrA
mzjahromi
پنج شنبه 03 آذر 1384, 19:06 عصر
ما که VB بلد نیستیم بگو می خوای چیکار کنی؟
disappear
پنج شنبه 03 آذر 1384, 19:17 عصر
اگه می خوای متغیر عمومی تعریف کنی باید در ابتدای یونیت هر فرم در قسمت Var متغیر خودت را تعریف کنی ! و برای اینکه بتونی در فرمهای دیگه هم قابل استفاده باشه در قسمت Public بنویسی .
mzjahromi
پنج شنبه 03 آذر 1384, 19:22 عصر
البته اگه در قسمت Var تعریف بشه میشه عمومی و همه جا بهش دسترسی هست ولی اگه در قسمت Public تعریف بشه متعلق به اون فرم میشه (نه عمومی) ولی از همه جا بهش دسترسی داریم
دنی کوئیل
پنج شنبه 03 آذر 1384, 19:39 عصر
ممنون اقایان
حالا بگید چه جوری میشه روال عمومی نوشت
که تو همه ای فرم ها بشه از آن استفاده کرد
mzjahromi
پنج شنبه 03 آذر 1384, 19:51 عصر
می تونی تابعت رو تو یک فرم تعریف کنی بعد هرجا خواستی ازش استفاده کنی بنویسی
form1.function1(
برای تابع عمومی هم مثل متغیر عمومی
declaration اونو تو قسمت var تعریف می کنی و خودش هم تو Implimentation
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function test:Integer;
implementation
{$R *.dfm}
function test:integer;
begin
test:=1;
end;
end.
دنی کوئیل
پنج شنبه 03 آذر 1384, 20:03 عصر
من تابع نمی خواهم من روال می خواهم
تابع مقدار برگشتی داره ولی روال نداره
mzjahromi
پنج شنبه 03 آذر 1384, 20:29 عصر
خوب بجای Function بنویس Procedure همین. فرقی که نمیکنه مهم روش کاره
دنی کوئیل
پنج شنبه 03 آذر 1384, 20:37 عصر
ممنون از کمک شما دوست عزیز
vcldeveloper
جمعه 04 آذر 1384, 06:59 صبح
برای تابع عمومی هم مثل متغیر عمومی
declaration اونو تو قسمت var تعریف می کنی و خودش هم تو Implimentation
در بخش Var به اون شکلی که شما مثال زدید، تابع تعریف نمی کنند. در واقع اگه شما function test را قبل از Var هم می نوشتید، کد بدون مشکل کامپایل میشد. تابع باید در قسمت Interface تعریف بشه و Var فقط برای تعریف متغیرها ست.
aLiReZa hOsSeInI
پنج شنبه 18 خرداد 1385, 17:53 عصر
من متوجه نشدم
به فرض من به متغیر x از نوع داخل فرم 1 یه مقدار میدم حالا میخوام بعد از مخفی شدنش و باز شدن فرم دیگه این مقدار را جایگزین کپشن فرم دوم بکنم.
حالا باید اینکار را کرد:
1- تعریف متغیر در بخش پابلیک یونیت 1
2- مقدار دهی در یونیت 1
3- یوز کردن یونیت 1 در یونیت 2
و تمام. درسته؟
آیا اونوقت ما مقدار متغیر x را می توانیم در فرم 2 استفاده کنیم؟
ghabil
پنج شنبه 18 خرداد 1385, 19:00 عصر
اگر منظورت داخل فرم ، یعنی تو کلاس فرم تعریف کردی خب باید Instance کلاست (یعنی آبجکت کلاس) هنوز موجود باشه ... اما اگر داخل کلاس تعریف نکردی نیازی به موجود بودن آبجکت هم نیست ولی اصولا کار توصیه شده ای نیست ... ضمنا شنیدم جدیدا دلفی Class Property هم گذاشته از دلفی 2005 به بعد...
aLiReZa hOsSeInI
پنج شنبه 18 خرداد 1385, 21:16 عصر
درسته دوست عزیز
اما اصولا این کار توصیه نمیشه را متوجه نمیشم میشه بیشتر و مرحله به مرحله به سئوال زیرم پاسخ بدی:متفکر:
یک دنیا ممنون
ببین شما یه برنامه چند فرمی داری
در فرم اولت از طریق ادیت یه استرینگ مثلا اسمو می خونی بعد این اسمو داخل یه متغییر میزاری
بعد باز دن باتنی فرم 1 هاید میشه و فرم 2 نمایان میشه
حالا مثلا می خواهی محتویات اون متغییر را که یه رشته هست حالا بطور مثال داخل تکس یه ادیت داخل فرم 2 ریخته شه و نمایش داده بشه.
حالا شما دقیقا چه روشی را توصیه میکنی و ممنون میشم پله پله توضیح بدی برای دست یافتن به محتویات اون متغیر باید چه کرد:قلب:
ghabil
پنج شنبه 18 خرداد 1385, 22:36 عصر
این که چرا گرفتن Global Variable توصیه نمیشه رو ایشالا یک دفعه دیگه توضیح میدم اما در مورد کار شما :
اگر Form1 و Form2 داری و میخوای از فرم 1 فرم2 رو نشون بدی و هیچ کدوم از فرمها رو هم Destroy نمیکنی اصلا دلیلت برای گرفتن یک متغیر چیه مثلا اینجوری بنویس :
Form2.edit1.text := from1.edit1.text
form2.show;
اما اگر به دلیلی لازمه که متغیری بگیری که در جاهای دیگه هم بتونی بهش دسترسی داشته باشی کار قشنگ اینه که یک Property در فرمت داشته باشی و مقدار اون پراپرتی رو ست بکنی (اینجوری میشه برنامه نویسی آبجکت ارینتد خوشگل)
aLiReZa hOsSeInI
جمعه 19 خرداد 1385, 07:45 صبح
خوب من دو تا متغیر باید بگیرم یکی از نوع عددی و یکیم رشته.
چون در چند فرم بعدی به این دو برای تعیین سطح استفاده از امکانات خیلی نیاز میشه.
پس بای از روش دوم شما استفاده کنم و ممنون میشم بهم بگی چطوری این پروپرتی را ایجاد و مقدارشو ست کنم.
از اینکه به این قشنگی و باحوصله به سئوالاتم جواب میدی یک دنیا سپاسگزارم.
ghabil
جمعه 19 خرداد 1385, 10:56 صبح
private
FcustomProperty: Integer;
public
CustomProperty : Integer read FCustomProperty write FCustomProperty
end;
می تونی بجای Read FCustom Property یا Write FCustomProperty از یک تابع استفاده کنی مثلا write SetCustomProperty(Value: Integer) که بهت امکان پروسس روی مقادیر پراپرتی رو هم میدن که البته فکر کنم تو این مثالی که گفتی لازم نداریشون
راستی باز هم اگر میخوای قشنگ کد بنویسی میتونی یک رکورد تعریف بکنی :
TAccRecord = record
IntVal: Integer;
StrVal: String;
end;
بعد پراپرتیت رو از نوع این رکورد تعریف کنی ، خوبیش اینه که بعدا مثلا اگه خاصیتی یک مقدار دیگه هم اضافه کنی فقط کافیه ساختار رکوردت رو عوض کنی ، ضمن اینکه Abstraction هم داری...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.