بچه ها کسی هست که نسخه ی 2008 ویژوال بیسیک رو بلد باشه ؟
من سوالایی که دارم بپرسم.
Printable View
بچه ها کسی هست که نسخه ی 2008 ویژوال بیسیک رو بلد باشه ؟
من سوالایی که دارم بپرسم.
سلام دوست عزبز
نمی دونم منظور شما از این جمله چیه :
اما شما می تونستید سوال هاتون رو بپرسید و منتظر جواب دوستان بمونید...نقل قول:
بچه ها کسی هست که نسخه ی 2008 ویژوال بیسیک رو بلد باشه ؟
موفق باشید.
سلام دوست عزیز.
من هم مدتی است که از ویژوال بیسیک 6 به 2008 مهاجرت کرده ام و به خوبی خودم رو باهاش جفت کرده ام!
امیدوارم بتونم کمکت کنم!!!
میتونی سوالاتت رو بیان کنی مطمئن باش کسانی برای پاسخ دادن بهت هستند!!!
سلام!
به انجمن NET Framework. مراجعه شود.
موفق باشید :11:کد:http://forum.p30world.com/forumdisplay.php?f=92
لطفا یکی به این سوال جواب بده ...
نمیدونم کسی با create graphic کار کرده یا نه.
تو قطعه کد زیر کاربر میتونه با حرکت موس و نگه داشتن دکمه ی چپ روی کنترل مورد نظر مثل براش فتوشاپ نقاشی کنه ولی مشکل من رنگشه ... میخوام رنگ رو کاربر خودش با استفاده از color dialog انتخاب کنه ولی چه جوری ؟
colordialog1.color رو قبول نمیکنه تا به عنوان رنگ بشناسه.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
نظر بدی نیست.نقل قول:
به انجمن NET Framework. مراجعه شود
colordialog یک Color بر میگرداند که یک رنگ است در حالی که برای پرکردن یک ناحیه شما نیاز به یک Brush دارید که با یک الگوی قلم مویی خاص ناحیه ای را پر کند، مثلاً تکرار یک عکس کوچک یا با نوعی هاشور یا با یک رنگ خالص و....نقل قول:
تو قطعه کد زیر کاربر میتونه با حرکت موس و نگه داشتن دکمه ی چپ روی کنترل مورد نظر مثل براش فتوشاپ نقاشی کنه ولی مشکل من رنگشه ... میخوام رنگ رو کاربر خودش با استفاده از color dialog انتخاب کنه ولی چه جوری ؟
در مورد قلم مویی با رنگ خالص میتوانید از SolidBrush استفاده کنید.
و ضمناً بهتر است از کدی مثل این استفاده کنید:
کد:Dim color As System.Drawing.Color = System.Drawing.Color.Blue 'REM = Me.ColorDialog.Color
Using _
graph As System.Drawing.Graphics = Me.CreateGraphics, _
brush As New System.Drawing.SolidBrush(color)
graph.FillEllipse(brush, 0, 0, 100, 100)
End Using
دوست عزیز دستت درد نکنه ...
مشکلم حل شد و اون چیزی که مد نظرم بود رو ساختم.
همیشه به این فکر میکردم که soild brush با brush چه فرقی داره که فکر کنم الان فهمیدم.
میشه در مورد دستور using_ یه توضیحی بدی ؟ ... ممنون میشم
سلام
forum.p30world.com/showthread.php?p=1556644#post1556644نقل قول:
میشه در مورد دستور using_ یه توضیحی بدی ؟
من توی وی بی 6 یه برنامه واسه ساخت کنترل ساخته بودم ... مثلا کاربر رو یه دکمه که کلیک میکرد یه label ساخته میشد و میتونست تنظیمات اون رو تغییر بده ولی تو VB2008 نمیدونم کد ساخت کنترل چیه ... شما میدونی ؟
و سوال دوم ... آیا میتونم کاری کنم که وقتی کاربر با استفاده از DrawEllipse یه بیضی میکشه بعدش این بیضی توسط withevent تو لیست رویداد ها بیاد ؟
سلام
بگذارید یک چیز را شفاف برایتان روشن کنم.نقل قول:
من توی وی بی 6 یه برنامه واسه ساخت کنترل ساخته بودم ... مثلا کاربر رو یه دکمه که کلیک میکرد یه label ساخته میشد و میتونست تنظیمات اون رو تغییر بده ولی تو VB2008 نمیدونم کد ساخت کنترل چیه ... شما میدونی ؟
در VB9 هر کاری که در زمان طراحی انجام میشود در runtime هم ممکن است و اصولاً فرقی با هم ندارد، درست برعکس VB6!
دیگه از کامپایل کد که بالاتر نداریم؟؟؟
شما با VB9 میتوانید کد VB9 داخل یک String را کامپایل کنید و به صورت dll یا exe در هارد ذخیره کنید یا بدون ذخیره در هارد و بعد از کامپایل اجرا کنید، منظورم Script نویسی و VBScript نیست. این در دسترس بودن خود هسته مرکزی کامپایلر IL است که خود VS از آن استفاده میکند.
(در واقع VS9 بر خلاف VS6 ابزار حیاتی نیست و بلکه یک لایه کمکی است، شما اگر فقط Framework را نصب کنید و یا در Vista باشید با یک Notapad هم میتوانید برنامه VB9 نوشته کامپایل کنید و خروجی exe را بدون نصب VS تحویل بگیرید.)
=====
وقتی شما در VB6 کنترلری را روی فرمتان قرار میدهید، مختصات و مشخصات کنترلر در فایل frm قرار میگیرد تا بعداً کامپایلر به صورت خاص خدمتش برسد!
ولی وقتی شما در VB9 کنترلری را روی فرم میدهید، در واقع VS به شما کمک میکند و کد runtime ساخت کنترلر و اضافه شدن آن به فرم را به جای شما در فایل Designer.vb تایپ میکند، یعنی اگر شما بروید و کدهای VB9 موجود در Designer.vb را تغییر دهید، خواهید دید کنترلر شما در زمان طراحی هم تغییر میکند.
به بیان دیگر کنترلرهای فرمهای VB9 مختصات و خواصشان به صورت خاص و ویژه ذخیره نمیشود، بلکه کد VB9 است و تنظیم خواص تایپ میشود و بعد کامپایلر مثل مابقی کدها این کد را هم کامپایل میکند.
امیدوارم متوجه منظورم شده باشید.
در VB9 همه کدها طبق قوانین شی گرایی (OOP) کار میکنند و اصولی ثابت و مشخص بر برنامه نویسی desktop و web و... حکم فرما است.
اگر یک Label جدید میخواهید، کافی است شی مورد نظر را با دستور New و به مجموعه Controls فرم مورد نظر Add کنید، خواص این شی جدید را هم میتوانید قبل/بعد از Add به دلخواه تنظیم کنید.
کد اضافه کردن یک دکمه + هندلر رویداد کلیکش...
اگر اصول شی گرایی و پلیمورفیزم را درک کرده باشید، VB9 و #C برایتان بسیار راحت خواهد بود.کد:'...
'...
'...
Dim x As New System.Windows.Forms.Button
x.Text = "Hello 1"
x.Location = New System.Drawing.Point(10, 10)
AddHandler x.Click, AddressOf Me.FunctionName
Me.Controls.Add(x)
Dim y As New System.Windows.Forms.Button
y.Text = "Hello 2"
y.Location = New System.Drawing.Point(100, 100)
AddHandler y.Click, Function(sender1 As Object, e1 As System.EventArgs) System.Windows.Forms.MessageBox.Show("Hello 2")
Me.Controls.Add(y)
'...
'...
'...
Private Sub FunctionName(ByVal sender As Object, ByVal e As EventArgs)
System.Windows.Forms.MessageBox.Show("Hello 1")
End Sub
(حتی وقتی به یک Point برای تخصیص به Location نیاز داریم، آنرا New میکنیم، درست مثل خود Button ! یعنی طریقه استفاده از یک Button با یک Point فرقی ندارد!)
=====
این هم باز به همان تفکر شی گرایی مربوط میشود.نقل قول:
آیا میتونم کاری کنم که وقتی کاربر با استفاده از DrawEllipse یه بیضی میکشه بعدش این بیضی توسط withevent تو لیست رویداد ها بیاد ؟
ترسیم یک دایره فقط یک ترسیم است یک تغییر رنگ چند پیکسل، همچین چیزی نمیتواند رویداد داشته باشد ولی اگر یک کنترلر مخصوص ترسیمتان داشته باشید و ترسیم را در محدود کنترلر خودتان انجام دهید، آنگاه رویداد هم خواهید داشت.
forum.p30world.com/showthread.php?p=2565004#post2565004
واقعا ازتون ممنونم ... خیلی خوب راهنمایی میکنید.
و یه سوال دیگه در مورد این برنامه نویسی :
- برنامه ی من یه برنامه ی ساده س که مخلوطی از notepad و paint هست، میخوام قابلیت save کردن پروژه رو به کاربر بدم با پسوند مخصوص خود برنامم.
مثلا کاربر روی دکمه ی save کلیک کنه و پروژه رو با پسوند *.majid ذخیره کنه و بعد بتونه اون رو لود کنه تا بقیه ی کارش رو انجام بده.
مطمئنم که میشه ولی نمیدونم چه جوری ...
سلام
بله مشکل خاصی ندارد...
ولی باید بدانم اطلاعات شما چی است که باید ذخیره شود...
یک متن است؟ یک لیستی از نقاط است؟ یک آرایه عددی است؟ یک تصویر است؟ مخلوطی از اینها است؟ و...
در یک برنامه اصولی شما باید یک Class داشته باشید که مثل بانک اطلاعاتی برنامه در RAM باشد و همه دیتا ها از آن خوانده شود و در آن نوشته شود، بعد برای Save و Load از یک فایل کافی است فقط این Class را Serialize و Deserialize کنید.
این سریالی کردن میتواند
1) دستی و با فرمت خاصی صورت بگیرد
2) طبق رسم مرسوم و جدید اغلب برنامه ها و با حصول شرایط به فرمت XML و با کمک کلاسس System.Xml.Serialization.XmlSerializer و نمونه های مشابه صورت بگیرد.
3) میتوانید به صورت باینری و با حصول شرایط با کلاسس System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter صورت بگیرد.
و...
داده های لحظه ای برنامه را شرح دهید؟ (چه چیزهایی باید ذخیره شود؟)
توی این برنامه ی خیلی ساده که ساختم کاربر میتونه با یه براش خیلی ساده مثل paint عمل کنه، و با استفاده از دستور Draw میتونه rectangle یا ellipse رسم کنه و امکان رسم خط هم با استفاده از drawline داره.
کاربر همه این کارها رو میتونه روی richbox انجام بده. (منظورم اینه که من این دستورات رو روی ریچ باکس گزاشتم)
در نتیجه محتویات نوشته شده توی یه richbox و شکل های کشیده شده به وسیله ی brush و draw باید ذخیره بشن.
سلام
اگر برای سادگی و کمی کد روش 3) را انجام دهیم، چیزی شبیه این خواهد شد...
کد:<Serializable()> Public Class Data
Public Rtf As String
Public Img As System.Drawing.Image
Public Sub Save(ByVal file As String)
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Using stream As New System.IO.FileStream(file, System.IO.FileMode.OpenOrCreate)
formatter.Serialize(stream, Me)
End Using
End Sub
Public Shared Function Load(ByVal file As String) As Data
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Using stream As New System.IO.FileStream(file, System.IO.FileMode.Open)
Return TryCast(formatter.Deserialize(stream), Data)
End Using
End Function
End Class
'...
Dim bmp As New System.Drawing.Bitmap...
'...
'...
Dim d As New Data
d.Rtf = Me.RichTextBox1.Rtf
d.img = bmp
d.Save("C:\file.bin")
'...
'...
d = Data.Load("C:\file.bin")
Me.RichTextBox1.Rtf = d.Rtf
bmp = TryCast(d.img, System.Drawing.Bitmap)
'...
ببخشید منظورتون رو متوجه نشدم.نقل قول:
سلام
اگر برای سادگی و کمی کد روش 3) را انجام دهیم، چیزی شبیه این خواهد شد...
سلام
منظورم ارجاع به پست قبلی ام بود (پست 12)نقل قول:
اگر برای سادگی و کمی کد روش 3) را انجام دهیم...
ببخشید منظورتون رو متوجه نشدم
فکر نکنم با کد که مشکلی داشته باشید.نقل قول:
1) دستی و با فرمت خاصی صورت بگیرد
2) طبق رسم مرسوم و جدید اغلب برنامه ها و با حصول شرایط به فرمت XML و با کمک کلاسس System.Xml.Serialization.XmlSerializer و نمونه های مشابه صورت بگیرد.
3) میتوانید به صورت باینری و با حصول شرایط با کلاسس System.Runtime.Serialization.Formatters.Binary.Bin aryFormatter صورت بگیرد.
و...
از راهنماییتون خیلی ممنونم،
میشه در مورد کد بیشتر توضیح بدید ؟
من چیز زیادی ازش نفهمیدم.
اگه میتونید وقتی کد رو مینویسید به همراه کامنت باشه، اگه به زبان انگلیسی هم بنویسید مشکلی نیست.
خیلی خیلی ممنونم.
امیدوارم که بتونم جبران کنم.
از این که وقتتون رو میگیرم خیلی عذر میخوام.
به هر حال ما هم دوست داریم از وی بی چیزی یاد بگیریم.
سلام
آخه جوان رشید، دو خط کد که کامنت نداره !.... :31:
یک کلاسس با قابلیت سریالی تعریف کردیم که دو مقدار را نگه داری میکندکد:<Serializable()> Public Class Data
Public Rtf As String
Public Img As System.Drawing.Image
Public Sub Save(ByVal file As String)
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Using stream As New System.IO.FileStream(file, System.IO.FileMode.OpenOrCreate)
formatter.Serialize(stream, Me)
End Using
End Sub
Public Shared Function Load(ByVal file As String) As Data
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Using stream As New System.IO.FileStream(file, System.IO.FileMode.Open)
Return TryCast(formatter.Deserialize(stream), Data)
End Using
End Function
End Class
اولی به نام Rtf یک String است که برای نگه داری متن فرمت دار و مخصوص RichTextBox استفاده میشود.
دومی با نام Img یک Image یا Bitmap (عکس) است که کلیه نقاشی ها و خطوط ترسیمی شما را در خود دارد.
دو متد هم داری.
اولی با نام Save وظیفه سریالی کردن کلاسس عزیزمان را بر عهده دارد!
شی BinaryFormatter را میسازد،
فایل مورد نظر را برای نوشتن باز میکند،
کلاسس جاری که کد در آن اجرا میشود (Me) به همراه stream فایل باز شده تحویل BinaryFormatter میدهد تا کلاس را سریالی کند و در فایل ذخیره کند.
دومی با نام Load است و وظیفه ضد سریالی کلاسس را بر عهده دارد.
شی BinaryFormatter را میسازد،
فایل مورد نظر را برای خواندن باز میکند،
stream فایل باز شده را تحویل BinaryFormatter تا اطلاعات را خوانده و مقدار جدید از کلاسس Data را پس دهد
در نهایت چون خروجی BinaryFormatter از نوع Object است (و مطمئن هستیم که داخلش کلاسس Data خودمان قرار دارد) با دستور TryCast اشره گر Object را به Data قالب ریزی میکنیم.
در کدهای برنامه برای ذخیره...کد:'...
Dim bmp As New System.Drawing.Bitmap...
'...
'...
Dim d As New Data
d.Rtf = Me.RichTextBox1.Rtf
d.img = bmp
d.Save("C:\file.bin")
'...
'...
d = Data.Load("C:\file.bin")
Me.RichTextBox1.Rtf = d.Rtf
bmp = TryCast(d.img, System.Drawing.Bitmap)
'...
با کمک New نمونه جدیدی از کلاسس Data میسازیم و محتویات RichTextBox و تصویر نقاشی شده را در ان میریزیم و متد Save را اجرا میکنیم.
(معمولاً این کلاسس در یک برنامه از قبل وجود دارد و دیتا هم در ان قرار دارد)
برای open هم...
دستور Load را اجرا میکنیم و نسخه جدید و کاملی از Data را پس میگیریم
این بار به صورت عکس محتویات Data را به RichTextBox و تصویرمان باز میگردانیم.
اگر کدخاصی را متوجه نشدید، بگویید تا همان را بیشتر توضیح دهم.
=====
فقط بدیهی است که ترسیمات شما نباید یک راست در روی پرده نمایش مونیتور انجام شود و باید آنها را در bmp داخل ram تان ترسیم کنید و بعد bmp را روی مونیتور ترسیم کنید، اینطوری بعداً با save و load تصویر هم مشکلی نخواهید داشت.
البته در کل ترسیم تصویر روی RichTextBox یکم عجیب و غریب است!! و اگر RichTextBox کوچک باشد و نیاز به Scroll پیدا کنید...
خیلی خیلی متشکر.
در مورد شی object اگه میشه توضیح مختصری بدید و بگید که مجاها میشه ازش استفاده کرد.
سلام
برای VB6 کارها میتوان گفت Object جایگزنی بر Variant است.
ولی Variant یک ساختار COM است و اصول کاملاً متفاوتی دارد و همه انواع دیتاها را نمیتوان در آن ریخت.
ولی Object در VB9 یک ساختار پایه با اصول OOP است و کلیه ساختارهای موجود به صورت مستقیم و غیر مستقیم وراثتی از Object هستند ... (انواع Class و Structure و Delegate و Enum و...)
در نتیجه هر اطلاعاتی را میتوان در Object ریخت، حتی اشاره گرهای توابع... و ساختارهایی که خودمان کدش را نوشتیم، (مثل همین کلاسس درپیت Data در مثال فوق)
در واقع هر کلاسی که تعریف میکنید باید طبق اصول سخت گیرانه OOP دات نت از یک کلاسس دیگر مشتق شده باشد و وقتی در تعریف یک کلاس ما صراحتاً کلاسس پایه را مشخص نمیکنیم در واقع از Object وراثت میگیریم.
دو کد زیر برابر هستند
اگر احیاناً، احتمالاً (و یک درصد) متوجه مطالب فوق نشدید، زیاد مهم نیست، بعداً که پایه کاریتان قوی تر و شفاقت بیشتری با oop پیدا کردید لذت خواهید برد!کد:Public Class Class1
End Class
=====
Public Class Class2
Inherits Object
End Class
فعلاً شاید دانستن این نکته کافی باشد که ره چیزی را میتوانید در Object و برای تبدیل اشاره گر Object به دیتای اولیه (قالب ریزی) میتوانید از DirectCast و Trycast استفاده کنید، ضمن آنکه CType بجز قالب ریزی وظیفه تبدیل را هم انجام میدهد.
(این مطالب در خصوص کل سلسه مراتب وراثتی مصداق دارد و صحیح است)
کد:Option Strict On 'REM اولین خط در فایل
'...
'...
Dim obj As Object
Dim i As Integer = 40
Dim s As String = "Mahdi"
obj = i
i = CType(obj, Integer) 'REM CType(X, Integer) = CInt(X)
i = DirectCast(obj, Integer)
obj = s
s = CType(obj, String) 'REM CType(X, String) = CStr(X)
s = DirectCast(obj, String)
obj = i
s = CType(obj, String) 'REM CType(X, String) = CStr(X)
s = DirectCast(obj, String) 'REM --> Error!
ضمناً برای نوع داده های اصلی و پرکاربرد مثل Integer و String و UInteger و Short و UShort و... معادل CType کوتاه تر و با کد کمتری هم وجود دارد، مثل CInt و CStr و...
طریقه ی ساخت یک setup توی vb چه جوریه ؟
منظورم از لحاظ کده ... من مشابهش رو درست کردم.
کد کپی کردن یه فایل چیه ؟
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
طریقه ی ساخت یک setup توی vb چه جوریه ؟
منظورم از لحاظ کده ... من مشابهش رو درست کردم.
کد کپی کردن یه فایل چیه ؟
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
دست گلت درد نکنه،
ببخشید زحمت میدم :31:
:11::11::11::11::11::11::11:
سلام
خود VS امکان ساخت پروژه msi را دارد ...نقل قول:
طریقه ی ساخت یک setup توی vb چه جوریه ؟
دستور عادی کپی فایل این است:نقل قول:
کد کپی کردن یه فایل چیه ؟
ولی کپی را یکسره و بدون هیچ دیالوگی انجام میدهد.کد:System.IO.File.Copy("C:\file.txt", "D:\ali.txt")
(البته با api میتوانید در زمان کپی دیالوگ استاندارد همان سیستم عامل را هم نمایش دهید.)
چیز پیچیده ای نیست و سوالتان هم برایم کمی عجیب است، چون دقیقاً نمیتوانم متوجه شوم چه مشکلی در سر راهتان وجود دارد.نقل قول:
چه جوری میشه یک progress bar رو به یه عملیاتی از برنامه مثل کپی کردن یا لود شدن نسبت داد ؟
شما باید یک معیاری در کدتان داشته باشید، یک عدد که مشخص کننده Max مقدار و مقدار پیشرفت جاری باشد.
مثلاً در کپی 5 فایل، میتوانید معیار را تعداد فایل در نظر بگیرید،
آنگاه عدد Max را 5 در نظر بگیرید و با اتمام کپی هر فایل، شمارنده را یک واحد افزایش دهید
یا میتوانید معیار را حجم بایتی فایل در نظر بگیرید،
آنگاه عدد Max جمع بایتی کل فایلها خواهد بود و با اتمام کپی هر فایل، شمارنده را به اندازه حجم همان فایل افزایش میدهید.
حتی میتوانید عمل کپی هر فایل را خودتان دستی انجام دهید تا در هر لحظه بدانید چقدر از فایل کپی شده
(مثلاً تابع زیر میتواند فایل sourceFileName را در destFileName کپی کنید و اینکار را در بلوک های 16Kb انجام میدهد.)
حجم کل دیتایی که باید کپی شود strmsource.Length است) و حجم اطلاعاتی کپی شده تا همان لحظه strmdestin.Position است.)کد:Public Shared Sub FileCopy(ByVal sourceFileName As String, ByVal destFileName As String)
Const BUFFERSIZE As Integer = 16 * 1024
Dim buffer(BUFFERSIZE - 1) As Byte
Using _
strmsource As New System.IO.FileStream(sourceFileName,system.IO.FileMode.Open,system.IO.FileAccess.Read) , _
strmdestin As New System.IO.FileStream(destFileName,system.IO.FileMode.OpenOrCreate,system.IO.FileAccess.Write) )
Dim iRead As Integer
Do
iRead = strmsource.Read(buffer, 0, BUFFERSIZE)
If (iRead <= 0) Then Return
strmdestin.Write(buffer, 0, iRead)
'Report ... ,Max = strmsource.Length ,Current = strmdestin.Position
Loop
End Using
End Sub
اینقدر راحت بود و من نمیدونستم ؟!!!!!!! :18:
منو باش گفتم الان یه عالمه باید کد بنویسم .
از راهنماییتون ممنونم ... اما چند تا سوال :
ایکه گفتی یعنی چه ؟نقل قول:
خود VS امکان ساخت پروژه msi را دارد ...
چه جوری ؟نقل قول:
(البته با api میتوانید در زمان کپی دیالوگ استاندارد همان سیستم عامل را هم نمایش دهید.)
راستی یه سوال دیگه ... یادم رفت بپرسم :
آیا امکان این وجود داره که چیزی که من میخوام کپی کنم رو توی خود برنامم embedded کنم ؟
اگه این کار رو کنم path رو چه جوری باید بهش بدم ؟
یه سوال دیگه ... چه جوری میشه به وسیله ی وی بی سیستم کاربر رو چک کرد ؟
مثلا میخوام بگم اگه ویندوز کاربر ویستا ... فلان کار رو کن ... یعنی تو ایکس پی این کار رو نکنه
سلام
forum.p30world.com/showthread.php?p=1282316#post1282316نقل قول:
ایکه گفتی یعنی چه ؟
forum.p30world.com/showthread.php?p=1321023#post1321023
اگر سرچ کنید یک تاپیک دیگر هم جناب hamidreza_buddy دارند.
==============
Project->Add Classنقل قول:
چه جوری ؟
فایل جدید که ساخته شد همه چیز را پاک کنید و کد زیر را وارد کنید:
(این کد با مسیرهای unicode ای و نام فایلهای و پوشه های فارسی هم مشکلی ندارد.-برعکس VB6!)کد:Imports System.Runtime.InteropServices
Public NotInheritable Class OSFile
Private Sub New()
End Sub
Private Declare Unicode Function SHFileOperationW Lib "shell32.dll" (<MarshalAs(UnmanagedType.Struct), [In](), Out()> ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Private Structure SHFILEOPSTRUCT
Public hWnd As IntPtr
Public wFunc As Integer
<MarshalAs(UnmanagedType.LPWStr)> Public pFrom As String
<MarshalAs(UnmanagedType.LPWStr)> Public pTo As String
Public fFlags As Integer
Public fAnyOperationsAborted As Integer
Public hNameMappings As Integer
<MarshalAs(UnmanagedType.LPWStr)> Public lpszProgressTitle As String
End Structure
Public Shared Sub Copy(ByVal source As String, ByVal destin As String, ByVal owner As System.Windows.Forms.IWin32Window)
Dim s As New SHFILEOPSTRUCT
s.wFunc = 2
s.pFrom = source & ChrW(0)
s.pTo = destin & ChrW(0)
If (owner IsNot Nothing) Then
s.hwnd = owner.Handle
End If
SHFileOperationW(s)
End Sub
End Class
حالا باید بتوانید با دستوری شبیه این از دیالوگ مخصوص کپی کردن فایلها در خودر سیستم عامل استفاده کنید:
پارامتر آخر را برای پنجره مالک دیالوگ گذاشته ام، اگر دارید تک خط فوق را از داخل یک form اجرا میکنید میتوانید به جای Nothing اشاره گر Me را ارسال کنید.کد:OSFile.Copy("C:\Reza.txt", "D:\Mahdi.txt", Nothing)
==============
forum.p30world.com/showthread.php?p=1192806#post1192806نقل قول:
آیا امکان این وجود داره که چیزی که من میخوام کپی کنم رو توی خود برنامم embedded کنم ؟
اگه این کار رو کنم path رو چه جوری باید بهش بدم ؟
یا
میتوانید فایل را در MyComputer کپی کنید و در VS و SolutionExplorer با راست کلیک Paste کنید.
برای برخی فایلها مثل mdb و mdf و... به محض paste دیالوگی ظاهر میشود که مهم نیست و باید Cancel شود.
سپس فایل را در SolutionExplorer انتخاب کنید. (select) و به پالت properties بروید:
Build Action->Embedded Resource
Copy to Output Directory->Do not copy
تمام شد!
میتوانید در همان solutionexplorer با راست کلیک یک newfolder به نام دلخواهی بسازید و همه این قبیل فایلهایی که باید در داخل exe یا dll شما قرار بگیرند را در آن پوشه ی خاص قرار دهید.
برای Extract هم میتوانید از یکی از دو کد زیر استفاده کنید:
برای استفاده هم باید کدی شبیه این را اجرا کنید:کد:Public Shared Sub FileExtract1(ByVal sourceEmbeddedName As String, ByVal destFileName As String)
Const BUFFERSIZE As Integer = 16 * 1024
Dim buffer(BUFFERSIZE - 1) As Byte
Using _
strmsource As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(sourceEmbeddedName) , _
strmdestin As New System.IO.FileStream(destFileName,system.IO.FileMode.OpenOrCreate,system.IO.FileAccess.Write) )
Dim iRead As Integer
Do
iRead = strmsource.Read(buffer, 0, BUFFERSIZE)
If (iRead <= 0) Then Return
strmdestin.Write(buffer, 0, iRead)
'Report ... ,Max = strmsource.Length ,Current = strmdestin.Position
Loop
End Using
End Sub
Public Shared Sub FileExtract2(ByVal sourceEmbeddedName As String, ByVal destFileName As String)
Dim buffer() As Byte
Using strmsource As System.IO.Stream = System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream(sourceEmbeddedName)
buffer = New Byte(CInt(strmsource.Length) - 1) {}
strmsource.Read(buffer, 0, buffer.Length)
End Using
System.IO.File.WriteAllBytes(destFileName, buffer)
End Sub
فرق دو نمونه در این است که اولی این ذخیره را در بلوک های کوچک 16K انجام میدهد و در نتیجه برای فایلهای کوچک و بزرگ با اطمینان قابل استفاده است.کد:FileExtract("Projectname.Filename.Extension", "C:\Filename.Extension")
ولی دومی یک فایل را در یک مرحله خوانده و ذخیره میکند و فقط برای فایلهایی با حجم کم و معقول قابل استفاده است.
اگر فکر میکنید که کد اول یک کم شبیه کد دستی پست قبلیم شده، احتمالاً حق با شما است!!!!
Stream مفهوم ساده ای در حد یک نوارنقاله اطلاعات را دارد و کاربرد وسیعی بسیار در دات نت دارد...
دانلود و اپلود asp.net در طراحی صفحات وب و وسایتها بر اساس همین اصول است و همچین برخی قابلیت های شبکه و یا فشرده سازی اطلاعات و بافرینگ برخی دیتاها و خواندن و نوشتن فایلها و... و همانطور هم که در این دو پست دیدید چندان مشکل نیست.
==============
... If (System.Environment.OSVersion.Version.Major>=6) Then ... Elseنقل قول:
مثلا میخوام بگم اگه ویندوز کاربر ویستا ... فلان کار رو کن ... یعنی تو ایکس پی این کار رو نکنه
forum.p30world.com/showthread.php?p=2856795
فكر ميكنم اين بحث رو به قسمت مربوطه منتقل كنيد بهتر باشه
البته فکر نکنم زیاد هم ضروری باشه ... ولی منتقل کردنش که کار مدیراس ... اگه خیلی واجبه این تاپیک رو منتقل کنن ولی نکنه به جای منتقل کردن حذف کنن !!!نقل قول:
فكر ميكنم اين بحث رو به قسمت مربوطه منتقل كنيد بهتر باشه
خیلی خیلی ممنون. خوب حالا که فایل رو embedded کردم نحوه ی آدرس دهیش چه جوریه ؟نقل قول:
میتوانید فایل را در MyComputer کپی کنید و در VS و SolutionExplorer با راست کلیک Paste کنید.
برای برخی فایلها مثل mdb و mdf و... به محض paste دیالوگی ظاهر میشود که مهم نیست و باید Cancel شود.
سپس فایل را در SolutionExplorer انتخاب کنید. (select) و به پالت properties بروید:
Build Action->Embedded Resource
Copy to Output Directory->Do not copy
من میخوام فایلی که embedded شده رو کپی کنم روی یه درایو.
چه جوری باید بهش آدرس بدم ؟
یک سوال دیگه ... هرچی سعی کردم بنویسم نتونستم ... البته تونستم ولی نصفه کاره شد.
من روی فرم یه rich box دارم که کاربر آزادانه روش تایپ میکنه.
میخوام اگه کاربر یه موقع کلمه ی majid رو تایپ کرد،
رنگ کلمه ی مجید عوض بشه !
یعنی اگه سیاهه بشه قرمر.
مثل همین vb که تا یه کد وارد میکنیم رنگش رو عوض میکنه.
سلام
گمان میکنم شما پست 27 را چندان با دقت نخوانده اید !!!!!!!!!!!!!!!!!!!!!!!!!!!نقل قول:
خیلی خیلی ممنون. خوب حالا که فایل رو embedded کردم نحوه ی آدرس دهیش چه جوریه ؟
من میخوام فایلی که embedded شده رو کپی کنم روی یه درایو.
چه جوری باید بهش آدرس بدم ؟
کد:FileExtract("Projectname.Filename.Extension", "C:\Filename.Extension")
در این مورد بهتر است از چند رسمانی استاده کنید و البته VS از RichTextBox استفاده نمیکند.نقل قول:
من روی فرم یه rich box دارم که کاربر آزادانه روش تایپ میکنه.
میخوام اگه کاربر یه موقع کلمه ی majid رو تایپ کرد،
رنگ کلمه ی مجید عوض بشه !
یعنی اگه سیاهه بشه قرمر.
مثل همین vb که تا یه کد وارد میکنیم رنگش رو عوض میکنه
باید وقت کنم و تستی انجام دهم تا بتوانم جواب دقیق تری بدهم.
بله ... حواسم نبود ... خیلی ممنون.نقل قول:
گمان میکنم شما پست 27 را چندان با دقت نخوانده اید !!!!!!!!!!!!!!!!!!!!!!!!!!!
خیلی ممنون.نقل قول:
در این مورد بهتر است از چند رسمانی استاده کنید و البته VS از RichTextBox استفاده نمیکند.
باید وقت کنم و تستی انجام دهم تا بتوانم جواب دقیق تری بدهم.
راستی اون کدی که گذاشتید واسه چک کردن ویندوز بود ؟
یعنی عدد 6 نمایانگر ویندوز ایکس پی هست ؟
واسه ویندوز دیگه ... مثلا ویستا چه کدی رو باید وارد کرد ؟
سلام
من در این خصوص توضیح بیشتری ندادم چون لینک یک تاپیک را داده بودم.نقل قول:
راستی اون کدی که گذاشتید واسه چک کردن ویندوز بود ؟
یعنی عدد 6 نمایانگر ویندوز ایکس پی هست ؟
واسه ویندوز دیگه ... مثلا ویستا چه کدی رو باید وارد کرد ؟
عدد 6 نسخه vista است، برای لیست کاملتر به تاپیک زیر مراجعه کنید:
forum.p30world.com/showthread.php?p=2856795
اگر بعد از دیدن تاپیک همچنان مشکلی داشتید، میتوانید بپرسید.
=====
متاسفانه و با عرض شرمندگی چند روز اخیر کمی بیشتر سرم شلوغ شده، که با عث تاخیر در ارسال پاسخ شد.
ببخشید ... این سوال چی شد ... تونستید جوابش رو پیدا کنید ؟
نقل قول:
یک سوال دیگه ... هرچی سعی کردم بنویسم نتونستم ... البته تونستم ولی نصفه کاره شد.
من روی فرم یه rich box دارم که کاربر آزادانه روش تایپ میکنه.
میخوام اگه کاربر یه موقع کلمه ی majid رو تایپ کرد،
رنگ کلمه ی مجید عوض بشه !
یعنی اگه سیاهه بشه قرمر.
مثل همین vb که تا یه کد وارد میکنیم رنگش رو عوض میکنه.
سلام
در خصوص آن متن رنگی و richtextbox،
من مدت ها قبل یک کنترلر خیلی قوی دیده بودم و دانلود کرده بودم و بالاخره با جستجویی کافی (!) توانستم پیدایش کنم.
قویاً پیشنهاد میکنم به جای RichTextBox از این کنترلر استفاده کنید.
این کنترلر مخصوص همین کار طراحی شده و امکانات وسیعی در حد برابری با امکانات ویرایشگر متنی خود VS دارد.
نمونه کد ساده به همراه dll را میتوانید از زیر دانلود کنید:
cid-9b2bdd1b12ce8c7d.skydrive.live.com/self.aspx/H2FX.Net/TextEditor.zip
واااااااااااااااااااااااا ااااااااااااااااااااااااا ااااااااااااااااااای ...
دوست عزیز دستت درد نکنه ... این دیگه چه کنترل باهالیه ... خیلی خیلی ممنون.
این که خود برنامه نویسیه !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!
الان به راحتی میتونم اون چیزی که مد نظرمه رو درست کنم ...
البته هنوز کار کردن باهاش رو یاد نگرفتم،
میشه توضیح بدید چه جوریه ؟
من هرچی به مشخصه هاش ور رفتم نتونستم اون چی که میخوام بسازم ...
لطفا یه راهنمایی بکن،
مثلا همین رو چه طوری بسازم ؟
من هیچ جایی ندیدم که کلمه هایی که میخوام بهش معرفی کنم تا رنگش رو عوض کنه !نقل قول:
میخوام اگه کاربر یه موقع کلمه ی majid رو تایپ کرد،
رنگ کلمه ی مجید عوض بشه !
لطفا یه راهنمایی بکن.
سلام
در واقع این کنترلر از یک نرم افزار است که به نوعی مشابه و رقیب VS است،
این کنترلر میتوانید تمام امکانات کنترلر مشابه خود را در VS پیاده سازی کند...
قابلیت غلط املایی و خط stop زمان دیباگ و نمایش bookmark و تورفتگی دستورات و به احتمال 95 درصد نمایش گروه های جمع و بازشو (+ و - که در VS برای دستورات گروهی نشان میدهد) و... را دارد.
برای رنگ بندی لغات و یکسری خواص حیاتی دیگر این کنترلر یک فایل اطلاعاتی xml را قبول میکند و خودش به ذات یک سری xml برای پسوندهای vb و cs و htm و... دارد.
البته من خودم هیچگاه زمان کار کردن با این کنترلر را پیدا نکردم و نمیتوانم فوراً جواب سوالات شما را در این خصوص بدهم ولی قابلیت هایش را سالها قبل دیده ام !!! و حداقل میدانم که امکان پیاده سازی کامل را دارد.
این نمونه فایل xshd با فرمت xml خودش است که سینتکس VB را به کنترلر میفهماند.
شما این فایل را به دلخواه خود ویرایش کنید تا من وقتی پیدا کنم و ببینم چطور باید فایل مورد نظر را تحویلش داد.
cid-9b2bdd1b12ce8c7d.skydrive.live.com/self.aspx/H2FX.Net/TextEditor.VB.xshd.zip
برای مشاده راحت تر فایل میتوانید از مرور گر IE خودتان (کارد زرد بالا را ok کنید.) استفاده کنید.
یا خود VS هم فایلهای xml را خیلی خوب نمایش میدهد.
یا XMLNotepad
یا دست خر با خود برناه Notepad هم میتوانید فایل را مشاهده و ویرایش کنید.
از این که اینقدر زحمت میکشید خیلی خیلی ممنونم ... من منتظر کمک شما هستم، امیدوارم وقت کنید تا هرچه سریع تر بهم کمک کنید.
من به یه مشکل خوردم
وقتی داخل وی بی بصورت فارسی تایپ میکنم شکلک های عجیبی مینویسه
کسی نمودونه باید چیکار کنم تا این برطرف بشه و بتونم فارسی تایپ کنم بر روی فرم ها
با تشکر