امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
نویسنده پیام
siana_k1980 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 156
موضوع‌ها: 69
تاریخ عضویت: دى ۱۳۸۶

تشکرها : 36
( 9 تشکر در 7 ارسال )
ارسال: #1
تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
سلام
میشه با چند خط ساده کاری کرد که اگه فرم تغییر اندازه پیدا میکنه تمام کامپوننتهای داخلش هم متناسب با اون تغییر اندازه پیدا کنند و مکانشون هم در جای مناسبی قرار بگیره؟چون این تغییر اندازه ها و تغییر مکان کامپوننتها به هنگام کوچک یا بزرگ شدن فرم , کدنویسیش خیلی برام دردسره و باید با کد یکی یکی top و leftو گاهی height و width آنها را تنظیم کنم
۰۲-اسفند-۱۳۸۶, ۱۹:۵۵:۵۷
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #2
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
محل تاپیک زدن رو درست انتخاب کنید وگرنه دفعه بعدی پاک می شه
۰۲-اسفند-۱۳۸۶, ۲۰:۲۸:۵۲
ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #3
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
در واقعه فروم ریسازتون باید تناسب بین کامپوننتها و اندازه فرم رو به صورت فرمول بنویسید . مثلا شما داخل فرمتون یک لیست باکس دارید که میخواهید همیشه ،Top اون 200 باشه و طول اون همراه 100 تا کمتر از طول فرم باشه و همینطور عرض اون :

ListBox1.Height = Me.Height - 100 ' fff
ListBox1.Width = Me.Width - 100 ' ffffffff

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

۰۳-اسفند-۱۳۸۶, ۱۰:۵۴:۳۳
وب سایت ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #4
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
 
۰۴-اسفند-۱۳۸۶, ۰۸:۵۴:۳۰
ارسال‌ها
پاسخ
siana_k1980 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 156
موضوع‌ها: 69
تاریخ عضویت: دى ۱۳۸۶

تشکرها : 36
( 9 تشکر در 7 ارسال )
ارسال: #5
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
Di Di نوشته است:در واقعه فروم ریسازتون باید تناسب بین کامپوننتها و اندازه فرم رو به صورت فرمول بنویسید . مثلا شما داخل فرمتون یک لیست باکس دارید که میخواهید همیشه ،Top اون 200 باشه و طول اون همراه 100 تا کمتر از طول فرم باشه و همینطور عرض اون :

ListBox1.Height = Me.Height - 100 ' fff
ListBox1.Width = Me.Width - 100 ' ffffffff

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

آقای di di این کدی که شما نوشتین رو می دونم ولی اگه تعداد کامپوننتها زیاد بود برای همه این تنظیمات رو انجام دادن یک کم خسته کنندست
یه کد بهتر می خواستم البته هنوز فایل iron رو نیگا نکردم شاید بدردم بخوره در هر حال مرسی از اهنماییتون
۰۴-اسفند-۱۳۸۶, ۲۱:۱۲:۵۰
ارسال‌ها
پاسخ
siana_k1980 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 156
موضوع‌ها: 69
تاریخ عضویت: دى ۱۳۸۶

تشکرها : 36
( 9 تشکر در 7 ارسال )
ارسال: #6
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
Iron_Fist نوشته است: 

سلام
iron ممنون از کدتون خیلی لطف کردین ولی نمیدونم چرا اونا رو که در جای مناسبشون در برنامم کپی کردم برای من درست جواب نمی داد شما می تونید کمکم کنید؟
۰۶-اسفند-۱۳۸۶, ۲۰:۰۳:۰۹
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #7
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
سلام
برای من که مشکل نداشت
اگه ممکنه یه مثالی بزارید که ببینم مشکلتون چیه
۰۷-اسفند-۱۳۸۶, ۱۱:۳۲:۳۵
ارسال‌ها
پاسخ
siana_k1980 آفلاین
كاربر دو ستاره
**

ارسال‌ها: 156
موضوع‌ها: 69
تاریخ عضویت: دى ۱۳۸۶

تشکرها : 36
( 9 تشکر در 7 ارسال )
ارسال: #8
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
Iron_Fist نوشته است:سلام
برای من که مشکل نداشت
اگه ممکنه یه مثالی بزارید که ببینم مشکلتون چیه

سلام
مرسیاز راهنماییتون
اینم برنامه

من تو فرمی که تب لیست مشتری و جستجو داره کد شما رو paste کردم ولی درست نمیشد
(آخرین ویرایش در این ارسال: ۱۲-اسفند-۱۳۸۶, ۲۲:۳۰:۲۳، توسط Iron_Fist.)
۱۱-اسفند-۱۳۸۶, ۱۵:۳۱:۱۹
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #9
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
سلام من برنامه شما رو دانلود کردم
با توجه به اینکه تعداد کنترل های توی فرم زیاد هست دامنه تغییر اندازه
فرم زیاد نمی تونه باشه چون کنترل ها تو هم می رن
نظر من اینه که اندازه کنترل ها و فرم ثابت باشه و تغییر نکنه ولی در هر صورت
اگه جزو بخشی از پروژه شماست و استاد می خواد یا خودتون اسرار دارید
زورم رو روش می زنم ببینم چکار می تونم بکنم

در ضمن شما هر وقت که می خواید برنامه ای رو بفرستید سعی کنید چیزای اضافیش رو حذف کنید
من اینجا تو پروژه شما یه فایل دیتابیس دیدم که هم هجم فایل آپلود رو زیاد کرده و هم توش اطلاعاتی مثل
شماره تلفن و از این چیزا ها هست که فکر می کنم مال دوستانتون باشه و خصوصی باشه
در هر صورت من فایل پیوست پست رو پاک کردم
موفق باشید
(آخرین ویرایش در این ارسال: ۱۲-اسفند-۱۳۸۶, ۲۲:۴۶:۳۶، توسط Iron_Fist.)
۱۲-اسفند-۱۳۸۶, ۲۲:۳۴:۱۵
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #10
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
سلام من یه بررسی دوباره ای که کردم دیدم شما خیلی کنترل تو فرم
داری . تو این پروژه بهتره که بی خیال تغییر اندازه فرم بشید چون همه
چیزش بهم می ریزه . من که اگه پروژه مال خودم بود بی خیال این کار می
شدم . در کل اگه هم بخواید کد بنویسید به دردسرش نمی ارضه و کار
اذیت کننده ای هست تا یه چیز خوب از توش در بیاد .
۱۴-اسفند-۱۳۸۶, ۰۴:۳۷:۱۴
ارسال‌ها
پاسخ
1120 آفلاین
در حال پیشرفت
***

ارسال‌ها: 313
موضوع‌ها: 49
تاریخ عضویت: دى ۱۳۸۷

تشکرها : 404
( 381 تشکر در 161 ارسال )
ارسال: #11
RE: تغییر اندازه کامپوننتها به هنگام تغییر اندازه فرم
سلام دوستان . لطفا خرده نگیرید که چرا تاپیک قدیمی رو بالا کشیدم !

دیدم که اکثرا با این کار مشکل دارن گفتم کمکی کرده باشم :.

کد های زیر رو داخل یک ماژول بریزید :

کد:
Public Type ctrObj
  Name As String
  Index As Long
  Parrent As String
  Top As Long
  Left As Long
  Height As Long
  Width As Long
  ScaleHeight As Long
  ScaleWidth As Long
End Type

Private FormRecord() As ctrObj
Private ControlRecord() As ctrObj
Private bRunning As Boolean
Private MaxForm As Long
Private MaxControl As Long

Private Function ActualPos(plLeft As Long) As Long
  If plLeft < 0 Then
    ActualPos = plLeft + 75000
  Else
    ActualPos = plLeft
  End If
End Function

Private Function FindForm(pfrmIn As Form) As Long
  Dim i As Long
  
  FindForm = -1
  If MaxForm > 0 Then
    For i = 0 To (MaxForm - 1)
      If FormRecord(i).Name = pfrmIn.Name Then
        FindForm = i
        Exit Function
      End If
    Next i
  End If
End Function


Private Function AddForm(pfrmIn As Form) As Long
  Dim FormControl As Control
  Dim i As Long
  ReDim Preserve FormRecord(MaxForm + 1)

  FormRecord(MaxForm).Name = pfrmIn.Name
  FormRecord(MaxForm).Top = pfrmIn.Top
  FormRecord(MaxForm).Left = pfrmIn.Left
  FormRecord(MaxForm).Height = pfrmIn.Height
  FormRecord(MaxForm).Width = pfrmIn.Width
  FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight

  FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth
  AddForm = MaxForm
  MaxForm = MaxForm + 1

  For Each FormControl In pfrmIn
    i = FindControl(FormControl, pfrmIn.Name)
    If i < 0 Then i = AddControl(FormControl, pfrmIn.Name)
  Next FormControl
End Function

Private Function FindControl(inControl As Control, inName As String) As Long
  Dim i As Long
  
  FindControl = -1
  For i = 0 To (MaxControl - 1)
    If ControlRecord(i).Parrent = inName Then
      If ControlRecord(i).Name = inControl.Name Then
        On Error Resume Next
        
        If ControlRecord(i).Index = inControl.Index Then
          FindControl = i
          Exit Function
        End If
        On Error GoTo 0
      
      End If
    End If
  Next i
End Function

Private Function AddControl(inControl As Control, inName As String) As Long
  ReDim Preserve ControlRecord(MaxControl + 1)
  On Error Resume Next
  
  ControlRecord(MaxControl).Name = inControl.Name
  ControlRecord(MaxControl).Index = inControl.Index
  ControlRecord(MaxControl).Parrent = inName

  If TypeOf inControl Is Line Then
    ControlRecord(MaxControl).Top = inControl.Y1
    ControlRecord(MaxControl).Left = ActualPos(inControl.X1)
    ControlRecord(MaxControl).Height = inControl.Y2
    ControlRecord(MaxControl).Width = ActualPos(inControl.X2)
  Else
    ControlRecord(MaxControl).Top = inControl.Top
    ControlRecord(MaxControl).Left = ActualPos(inControl.Left)
    ControlRecord(MaxControl).Height = inControl.Height
    ControlRecord(MaxControl).Width = inControl.Width
  End If

  inControl.IntegralHeight = False
  
  On Error GoTo 0
  AddControl = MaxControl
  MaxControl = MaxControl + 1
End Function

Private Function PerWidth(pfrmIn As Form) As Long
  Dim i As Long
  
  i = FindForm(pfrmIn)
  If i < 0 Then i = AddForm(pfrmIn)
  
  PerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth
End Function

Private Function PerHeight(pfrmIn As Form) As Single
  Dim i As Long
  
  i = FindForm(pfrmIn)
  If i < 0 Then i = AddForm(pfrmIn)
  
  PerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight
End Function

Private Sub ResizeControl(inControl As Control, pfrmIn As Form)
  On Error Resume Next
  Dim i As Long
  Dim widthfactor As Single, heightfactor As Single
  Dim minFactor As Single
  Dim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As Long
  
  yRatio = PerHeight(pfrmIn)
  xRatio = PerWidth(pfrmIn)
  i = FindControl(inControl, pfrmIn.Name)

  If inControl.Left < 0 Then
    lLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
  Else
    lLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)
  End If

  lTop = CLng((ControlRecord(i).Top * yRatio) \ 100)
  lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)
  lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)
  
  If TypeOf inControl Is Line Then
    If inControl.X1 < 0 Then
      inControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
    Else
      inControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100)
    End If
    
    inControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)
    If inControl.X2 < 0 Then
      inControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)
    Else
      inControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100)
    End If

    inControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100)
  Else
    inControl.Move lLeft, lTop, lWidth, lHeight
    inControl.Move lLeft, lTop, lWidth
    inControl.Move lLeft, lTop
  End If
End Sub

Public Sub ResizeForm(pfrmIn As Form)
  Dim FormControl As Control
  Dim isVisible As Boolean
  Dim StartX, StartY, MaxX, MaxY As Long
  Dim bNew As Boolean
  
  If Not bRunning Then
    bRunning = True
    
    If FindForm(pfrmIn) < 0 Then
      bNew = True
    Else
      bNew = False
    End If

    If pfrmIn.Top < 30000 Then
      isVisible = pfrmIn.Visible
      On Error Resume Next
      
      If Not pfrmIn.MDIChild Then
        On Error GoTo 0
        'pfrmIn.Visible = False
      Else
        If bNew Then
          StartY = pfrmIn.Height
          StartX = pfrmIn.Width
          On Error Resume Next

          For Each FormControl In pfrmIn
            If FormControl.Left + FormControl.Width + 200 > MaxX Then _
              MaxX = FormControl.Left + FormControl.Width + 200
            If FormControl.Top + FormControl.Height + 500 > MaxY Then _
              MaxY = FormControl.Top + FormControl.Height + 500
            If FormControl.X1 + 200 > MaxX Then _
              MaxX = FormControl.X1 + 200
            If FormControl.Y1 + 500 > MaxY Then _
              MaxY = FormControl.Y1 + 500
            If FormControl.X2 + 200 > MaxX Then _
              MaxX = FormControl.X2 + 200
            If FormControl.Y2 + 500 > MaxY Then _
              MaxY = FormControl.Y2 + 500
          Next FormControl
          On Error GoTo 0
          
          pfrmIn.Height = MaxY
          pfrmIn.Width = MaxX
        End If
        On Error GoTo 0

      End If
      
      For Each FormControl In pfrmIn
        ResizeControl FormControl, pfrmIn
      Next FormControl
      On Error Resume Next

      If Not pfrmIn.MDIChild Then
        On Error GoTo 0
        pfrmIn.Visible = isVisible
      Else
        If bNew Then
          pfrmIn.Height = StartY
          pfrmIn.Width = StartX
          
          For Each FormControl In pfrmIn
            ResizeControl FormControl, pfrmIn
          Next FormControl
        End If
      End If
      On Error GoTo 0
      
    End If
    bRunning = False
  End If
End Sub

Public Sub SaveFormPosition(pfrmIn As Form)
  Dim i As Long

  If MaxForm > 0 Then
    For i = 0 To (MaxForm - 1)
      If FormRecord(i).Name = pfrmIn.Name Then
        FormRecord(i).Top = pfrmIn.Top
        FormRecord(i).Left = pfrmIn.Left
        FormRecord(i).Height = pfrmIn.Height
        FormRecord(i).Width = pfrmIn.Width
        Exit Sub
      End If
    Next i
    AddForm (pfrmIn)
  End If
End Sub

Public Sub RestoreFormPosition(pfrmIn As Form)
  Dim i As Long

  If MaxForm > 0 Then
    For i = 0 To (MaxForm - 1)
      If FormRecord(i).Name = pfrmIn.Name Then
        If FormRecord(i).Top < 0 Then
          pfrmIn.WindowState = 2
        ElseIf FormRecord(i).Top < 30000 Then
          pfrmIn.WindowState = 0
          pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).Height
        Else
          pfrmIn.WindowState = 1
        End If
        Exit Sub
      End If
    Next i
  End If
End Sub

و این هم نحوه استفاده :

کد:
Private Sub Form_Resize()
  ResizeForm Me
End Sub



فکر نکنم بهتر از این روشی وجود داشته باشه !
۲۱-شهریور-۱۳۸۸, ۰۳:۴۰:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : CRazYFULL


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] کلیپ برد هنگام استفاده از VBA eppagh 0 2,269 ۲۷-آبان-۱۳۹۳, ۱۰:۳۹:۴۸
آخرین ارسال: eppagh
  [سوال] تغییر مقدار ComboBox با تایمر محمدعلي 1 2,327 ۲۷-مرداد-۱۳۹۳, ۱۱:۵۱:۳۵
آخرین ارسال: Vb6Moderator
  [آموزشی] حركت انيميشني فرم هنگام باز و بسته شدن Ghoghnus 1 3,480 ۱۲-فروردین-۱۳۹۳, ۱۸:۰۳:۲۵
آخرین ارسال: mahdi321
Exclamation فایل و پوشه های سیستمی - تغییر تنظیمات Folder option mabus 7 8,150 ۰۵-مهر-۱۳۹۲, ۰۰:۴۱:۳۱
آخرین ارسال: ترانسپورتر
  ممیزی که با تغییر فونت به ویرگول تبدیل میشه! :-| mabus 3 4,697 ۲۰-شهریور-۱۳۹۲, ۱۰:۴۹:۴۰
آخرین ارسال: mabus
Exclamation تغییر در عکس sepahbod 1 2,831 ۱۸-شهریور-۱۳۹۲, ۱۷:۳۳:۵۷
آخرین ارسال: Ghoghnus
  تغییر کاربرد ماوس در ویژوال بیسیک MicrowaveCO 7 7,231 ۳۱-فروردین-۱۳۹۲, ۰۸:۴۱:۵۲
آخرین ارسال: MicrowaveCO
  [سوال] رسم shape هنگام اجرای برنامه behzady 1 2,743 ۰۳-خرداد-۱۳۹۱, ۱۰:۱۰:۳۰
آخرین ارسال: Ghoghnus
  تغییر آیکن هنگام کپی RAMA2009 2 3,861 ۰۵-اردیبهشت-۱۳۹۱, ۰۰:۳۵:۰۸
آخرین ارسال: RAMA2009
  [سوال] تغییر استاتوس یاهو ایدی از طریق ریجیستری movaffag 2 2,822 ۲۳-بهمن-۱۳۹۰, ۲۲:۲۱:۱۳
آخرین ارسال: movaffag

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS