پنجره showopen و showsave

the_king

مدیرکل انجمن
دستورات خواندن و نوشتن یک فایل متنی با ساختار ANSI ساده است :

برای نوشتن متن داخل Text1 در درون فایل C:\File.txt این کد را می نویسیم :
کد:
    Open "C:\File.txt" For Output As #1
    Print #1, Text1.Text
    Close #1

برای خواندن محتویات فایل C:\File.txt به درون Text1 این کد را می نویسیم :
کد:
    Dim FileText As String
    Open "C:\File.txt" For Binary As #1
    FileText = Space(LOF(1))
    Get #1, 1, FileText
    Text1.Text = FileText
    Close #1

البته فراموش نکنید که مشخصه Multiline مربوط به Text1 را True نمایید تا بتواند بیش از یک سطر را
نمایش دهد.

اما من ایندو روتین ساده را پیشنهاد نمی کنم، چون آنها نمی توانند متنهایی که Unicode هستند را به درستی بخوانند
و بنویسند.

متنهای Unicode برای هر کاراکتر از دو بایت حافظه استفاده می کنند و می توانند چندین زبان مختلف را در کنار هم ذخیره کنند.
خود نوع داده String ویژوال بیسیک در حقیقت دارای ساختار Unicode است ولی رابطهای استاندارد ورودی و خروجی آن
نظر CommandButton و Label و TextBox و روتین های کار با فایل بصورت ANSI طراحی شده اند و متن های Unicode
را پس از تبدیل بکار می برند.

پس بهتر است که به جای آن دو روتین استاندارد ذکر شده از این جفت کد زیر استفاده کنیم :

برای نوشتن در یک فایل از این روتین استفاده شود.
کد:
Private Sub SaveFile(ByVal Path As String, ByVal Text As String, Optional ByVal Unicode As Boolean)
    Dim Buffer() As Byte
    Dim IDCode As Integer
    On Error Resume Next
    Open Path For Output As #1
    Close #1
    Open Path For Binary As #1
    If Len(Text) > 0 Then
        If Unicode Then
            IDCode = &HFEFF
            Buffer = Text
            Put #1, 1, IDCode
            Put #1, 3, Buffer
        Else
            Buffer = StrConv(Text, vbFromUnicode)
            Put #1, 1, Buffer
        End If
    End If
    Close #1
End Sub

پارامتر اول نام فایلی است که قرار است در آن متنی نوشته شود، پارامتر دوم متنی است که قرار است نوشته شود
و پارامتر سوم تعیین می کند که متن بصورت ANSI ذخیره شود و یا Unicode. اگر True باشد بصورت Unicode ذخیره خواهد شد.

مثلا :
کد:
SaveFile "C:\File.txt", Text1.Text, True

برای خواندن محتویات یک فایل متنی از این تابع استفاده شود (هر دو سیستم ANSI و Unicode)
تابع متن فایل را به عنوان مقدار بازگشتی بر می گرداند.
کد:
Private Function ReadFile(ByVal Path As String) As String
    Dim Buffer() As Byte
    Dim IDCode As Integer
    On Error Resume Next
    Open Path For Binary As #1
    If LOF(1) > 0 Then
        Get #1, 1, IDCode
        If IDCode = &HFEFF Then
            If LOF(1) > 2 Then
                ReDim Buffer(0 To LOF(1) - 3) As Byte
                Get #1, 3, Buffer
                ReadFile = Buffer
            Else
                ReadFile = ""
            End If
        Else
            ReDim Buffer(0 To LOF(1) - 1) As Byte
            Get #1, 1, Buffer
            ReadFile = StrConv(Buffer, vbUnicode)
        End If
    Else
        ReadFile = ""
    End If
    Close #1
End Function

مثلا :
کد:
Text1.Text = OpenFile ("C:\File.txt")

ایندو روتین خطا های دسترسی به فایل را نادیده می گیرند و پیغامی ایجاد نمی کنند.

من بر اساس این دو تابع یک برنامه کامل نوشته ام که می تواند همانند NotePad فایلی را بخواند یا بنویسد.
یک کلاس Browse در این برنامه بکار رفته که برای انتخاب نام فایل ورودی و خروجی بکار می رود.
این کلاس ما را از بکارگیری کنترل ActiveX ای به نام Microsoft Common Dialog Control بی نیاز می سازد.

کد کامل برنامه به همراه فایل اجرایی EXE ضمیمه این پست می باشد.
 

پیوست ها

  • Sample.zip
    13.5 کیلوبایت · بازدیدها: 60

i_lover3000

Member
ج : نحوه ذخیره فایل و نمایش فایل ذخیره شده

سلام

فکر کنم با این برنامه که گذاشتم کارت راه بیافته :D



موفق باشید ... :sad:
 

پیوست ها

  • Text Editor.zip
    3.7 کیلوبایت · بازدیدها: 35

salehfard

New Member
درخواست راهنمایی

سلام
من با vb6 کار می کنم ، یک منو شامل فایل که فایل شامل زیرمنو بنام ppt و pdf تشکیل شده است. می خواهم زمانی که روی ppt می روم فایلی در کامپیوترم می باشد باز شودمن این کار را با commondialog انجام دادم ولی وقتی دکمه open رامی زنم فایل را باز نمی کند.ممنون می شم مرا راهنمایی کنید.
 

the_king

مدیرکل انجمن
سلام
من با vb6 کار می کنم ، یک منو شامل فایل که فایل شامل زیرمنو بنام ppt و pdf تشکیل شده است. می خواهم زمانی که روی ppt می روم فایلی در کامپیوترم می باشد باز شودمن این کار را با commondialog انجام دادم ولی وقتی دکمه open رامی زنم فایل را باز نمی کند.ممنون می شم مرا راهنمایی کنید.

اشتباه متوجه شده اید، CommonDialog اصلا توانایی باز کردن فایلی را ندارد، فقط مسیر فایلی که کاربر می خواهد باز شود را
به برنامه شما اعلام می کند. در واقع از زمانی که کاربر روی دکمه "Open" کلیک کرد، مسیر آن فایل را برمی گرداند و از آن
به بعد دیگر هیچ نقشی در عملیات باز کردن فایل ندارد. این خود برنامه نویس است که برای باز کردن فایل باید کد بنویسد.
از ShowOpen زمانی استفاده می شود که مسیر فایل از قبل مشخص و ثابت نیست و کاربر به دلخواه خود مسیر آنرا
انتخاب می کند.

شما می خواهید که یک فایل ppt باز شود؟ پس لابد Microsoft PowerPoint در سیستم شما نصب است وگرنه باز کردن این
فایل از عهده ویژوال بیسیک بر نمی آید.

برای اینکار نمی توانید از تابع Shell خود ویژوال بیسیک استفاده کنید چون فقط برای فایلهای اجرایی طراحی شده است.
برای نمایش صحیح فایل ppt از این تابع API می توانید استفاده کنید به نام ShellExecuteA :
کد:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

مثلا اگر مسیر فایل شما در متغیر Path قرار دارد ، این کد فایل را در حالت Show نمایش می دهد :
کد:
    ShellExecute Me.hWnd, [B]"Show"[/B], Path, vbNullString, vbNullString, 1

اگر می خواهید فایل مورد نظر در محیط پاورپوینت در حالت ویرایشی باز شود از حالت Open استفاده می کنیم :
کد:
    ShellExecute Me.hWnd, [B]"Open"[/B], Path, vbNullString, vbNullString, 1
 

salehfard

New Member
درخواست راهنمایی

سلام the_king
من این کد را در کدام قسمت وارد کنم ، منظور شما این بودکه commondialog را حذف کنم؟
مسیر کامل را چگونه بدم که با دکمه برروی منو آن صفحه باز شود؟
همین کد را در پنجره کد نوشتم خطا می داد. ببخشید من حرفه ای نیستم اگه می شه بیشتر توضیح دهید.
از راهنمایتون ممنونم.
 

the_king

مدیرکل انجمن
بهترین کاری که می توانم انجام بدم ضمیمه کردن یک برنامه کوچیک است که دارای یک منوی File با دو آیتم
Open و Show باشد.

کد:
Option Explicit

Private Declare Function [B]ShellExecute[/B] Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private pptPath As String

Private Sub MnuOpen_Click()
    OpenFile "open"
End Sub

Private Sub MnuShow_Click()
    OpenFile "show"
End Sub

Private Sub OpenFile(ByVal Operation As String)
    Dim [B]Browse[/B] As New [B]Browse[/B]
    Dim Path As String
    With [B]Browse[/B]
        .AllowMultiSelect = False
        .DefaultExt = "ppt"
        .Filter = "Microsoft PowerPoint (*.ppt)|*.ppt|All Files (*.*)|*.*|"
        .hWnd = Me.hWnd
        .InitFileName = pptPath
        .Title = "Open"
        Path = .ShowOpen
    End With
    If Len(Path) > 0 Then
        pptPath = Path
        [B]ShellExecute[/B] Me.hWnd, Operation, Path, vbNullString, vbNullString, 1
    End If
End Sub

شما برای انتخاب مسیر فایل یا باید از CommonDialog استفاده کنید و یا از کلاس Browse که من ساخته ام.
کد برنامه به همراه این کلاس Browse و فایل اجرایی exe ضمیمه این پست می باشد.
 

پیوست ها

  • Open ppt.zip
    10.8 کیلوبایت · بازدیدها: 25

salehfard

New Member
من واقعا ازتون ممنونم
اگر بخوام بدون کلاس browse ایجاد کنم باید از common dialog استفاده کنم. یعنی قسمت فیلتر کد زیر را وارد کنم.

Private Sub mnufileppt_Click()
CommonDialog1.Filter = "Powerpoint (*.ppt) | *.ppt"
CommonDialog1.InitDir = "D:\ccd"
CommonDialog1.ShowOpen
End Sub
خیلی زحمت کشیدید.:wink:
 

salehfard

New Member
درخواست راهنمایی

سلام the _king
از کمک شما متشکرم
می خواستم ببینم چگونه مامی توانیم زمانی که دکمه open را می زنم دقیقا همان صفحه که می خواهم باز شود و کاربر اجازه نداشته باشد به صفحه های دیگر یا فولدر های دیگر من دسترسی داشته باشد.
آیا من می توانم یک فرم دیگر باز کنم و بازدن دکمهopen آن فرم باز شود که صفحه باز شده من در آن باشد؟ یا جور دیگه ...
من نمی دونم آدرس کامل را کجا بدم که فقط آن صفحه باز شود.
از کمکتون ممنونم.
 
آخرین ویرایش:

mehran7

New Member
من یه سوال درباره ی Showopen داشتم،
وقتی که مقدار فلگ رو&H200 برای انتخاب چند فایل قرار می دم، می تونم چند فایل انتخاب کنم، ولی با دو مشکل:
1. پنجره Showopen مثل windows 98 می شه. Picture:http://www.mehran7.parsehgig.com/Showopen.jpg
2. اسامی فایل های انتخاب شده رو سر هم می نویسه.
اگه کمکم کنید ممنون میشم.
 

the_king

مدیرکل انجمن
از BIF_NEWDIALOGSTYLE برای استایل جدید استفاده کنید (کد H40& )
خروجی تابع در بین مسیر فایل های متفاوت از کد اسکی 0 یعنی vbNullChar استفاده می کنه.
بایستی با Split جداشون کنید.
 

جدیدترین ارسال ها

بالا