وعليكم السلام ورحمة الله وبركاته
انا تعلمت البرمجة في Qbasic عندما كان نظام التشغيل هو MSDos6 تم شيئا فشيئا ظهر الويندوز وبدأت على الفوكس برو تم الفيجوالبيسك 6 تم الفيجوال دوت نت وتعلمت ال VB.net وكذلك الـ C# تم انتقلت الى DElphi
هل تعلم الان رأيي في كل هذا
انا اسمي الفيجوال بيسك 6 برنامج لصنع ملفات الاتورن اكثر منه برنامج لصنع برامج .
الذي يجعلني لا استوعبه من الاخرين هو طالما انهم يريدون الفيجوال بيسك 6 لماذا لم يستخدموا الدلفي
هل تعلم الفرق بين الدلفي وبين الفيجوالبيسك 6 هو كالفرق بين شخص يملك سيارة بيجو 404 من صنع السبعينيات وبين شخص يملك مرسيدس موديل 2016
الدلفي لازالت في تطوير مستمر كالمرسيدس وافيجوال بيسك 6 توقفت تماما .
الفيجوالبيسك 6 بيئة غير مستقرة ومرهقة
في الدوت نت يمكنك ان تبرمج اشياء بسطر برمجي واحد والذي يحتاج الى Class كامل في الفيجوالبيسك 6
لابد ان يبحث الشخص ويتطور والا لن يتحرك ابدا
الثقنية تتغير وتتطور حتى في الدوت نت وسائر لغات البرمجة اما في الفيجوالبيسك 6 متوقفة تماما كمن يسبح ببركة ساكنة وكمن يسبح بنهر متدفق
الدوت نت يملك كنز من المكتبات والفئات لا تعد ولا تجصى في شتى المجالات وتتطور كل سنة
وانت تتحدث عن قواعد بيانات اكسس ، انت ذكرت اسواء نوع من قواعد البيانات الموجود على الاطلاق ، لم ارى قاعدة بيانات تتنكر الى نفسها الا هذه .
يمكنك باي لحظة ان تفتحها ويقول لك الاكسس هذا الملف غير معروف .
هل تعلم ان مايكروسوفت اول ما صنعتها صنعتها لكي يتعلم على الاخرون وليس لكي يعتمدوا عليها في برامجهم .
من الصعب ان يقنعك الاخرون بما يرونه الا بحال رأيت وجربت بنفسك
انا انصحك اذا لم تستوعب الدوت نت انتقل الى الدلفي فان فيها ملك لا يظلم عنده أحد .
ولزيادة الايضاح هل تتصور ان هذا الكود هو فقط لالتقاط صورة الى الشاشة في الفيجوالبيسك 6
كود :
Const RC_PALETTE As Long = &H100
Const SIZEPALETTE As Long = 104
Const RASTERCAPS As Long = 38
Private Type PALETTEENTRY
peRed As Byte
peGreen As Byte
peBlue As Byte
peFlags As Byte
End Type
Private Type LOGPALETTE
palVersion As Integer
palNumEntries As Integer
palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors
End Type
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Type PicBmp
Size As Long
Type As Long
hBmp As Long
hPal As Long
Reserved As Long
End Type
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal iCapabilitiy As Long) As Long
Private Declare Function GetSystemPaletteEntries Lib "gdi32" (ByVal hdc As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
Private Declare Function CreatePalette Lib "gdi32" (lpLogPalette As LOGPALETTE) As Long
Private Declare Function SelectPalette Lib "gdi32" (ByVal hdc As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
Private Declare Function RealizePalette Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture
Dim R As Long, Pic As PicBmp, IPic As IPicture, IID_IDispatch As GUID
'Fill GUID info
With IID_IDispatch
.Data1 = &H20400
.Data4(0) = &HC0
.Data4(7) = &H46
End With
'Fill picture info
With Pic
.Size = Len(Pic) ' Length of structure
.Type = vbPicTypeBitmap ' Type of Picture (bitmap)
.hBmp = hBmp ' Handle to bitmap
.hPal = hPal ' Handle to palette (may be null)
End With
'Create the picture
R = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
'Return the new picture
Set CreateBitmapPicture = IPic
End Function
Function hDCToPicture(ByVal hDCSrc As Long, ByVal LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture
Dim hDCMemory As Long, hBmp As Long, hBmpPrev As Long, R As Long
Dim hPal As Long, hPalPrev As Long, RasterCapsScrn As Long, HasPaletteScrn As Long
Dim PaletteSizeScrn As Long, LogPal As LOGPALETTE
'Create a compatible device context
hDCMemory = CreateCompatibleDC(hDCSrc)
'Create a compatible bitmap
hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
'Select the compatible bitmap into our compatible device context
hBmpPrev = SelectObject(hDCMemory, hBmp)
'Raster capabilities?
RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) ' Raster
'Does our picture use a palette?
HasPaletteScrn = RasterCapsScrn And RC_PALETTE ' Palette
'What's the size of that palette?
PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE) ' Size of
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
'Set the palette version
LogPal.palVersion = &H300
'Number of palette entries
LogPal.palNumEntries = 256
'Retrieve the system palette entries
R = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))
'Create the palette
hPal = CreatePalette(LogPal)
'Select the palette
hPalPrev = SelectPalette(hDCMemory, hPal, 0)
'Realize the palette
R = RealizePalette(hDCMemory)
End If
'Copy the source image to our compatible device context
R = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)
'Restore the old bitmap
hBmp = SelectObject(hDCMemory, hBmpPrev)
If HasPaletteScrn And (PaletteSizeScrn = 256) Then
'Select the palette
hPal = SelectPalette(hDCMemory, hPalPrev, 0)
End If
'Delete our memory DC
R = DeleteDC(hDCMemory)
Set hDCToPicture = CreateBitmapPicture(hBmp, hPal)
End Function
Private Sub Form_Load()
'Create a picture object from the screen
Set Me.Picture = hDCToPicture(GetDC(0), 0, 0, Screen.Width / Screen.TwipsPerPixelX, Screen.Height / Screen.TwipsPerPixelY)
End Sub
وهذا الكود لجعل نموذج شفاف طبعا لاحظ انه في الدوت نت يمكنك فعل ذلك من نافذة الخصائص بدون سطر برمجي واحد
كود :
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByValcrKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Boolean
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const LWA_ALPHA = 2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Sub Form_Load()
SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, 0, 128, LWA_ALPHA
End Sub
وايضا انت تتحدث عن الكريستال ريبورت هل تعلم انا لم استوعب حتى الذين يستخدمونه في الدوت نت وهو متطور اكثر من الذي عندكم
عندما اقارنه مثلا باي مصمم اخر وليكن مثلا FastReport لا يمكن ان اتصور وجه المقارنة كمن يسير على قدميه واخر يملك طائرة سيسنا 680 للنقل الخاص
واخيرا مصادر الدوت نت كثيرة الان ، وبشتى المجالات ، مشكلة مجتمعنا انه لا يريد ان يقراء لقد تعود على طلب كل شئ جاهز
أنظر مثلا الى الاسئلة المتداولة
1. اريد برنامج محاسبي ، يعني جاهز بالكامل .
2. اريد كود اضافة وتعديل وحذف ، المفروض ان يكتب هو ما تعلمه من المطالعة ويسأل عن الخطاء فقط حتى يتعلم جيدا .
وليس هذا فقط المفروض المبرمج يجيد اي لغة انجليزية او فرنسية ولو بنسبة 60% حتى يطالع بشكل اكبر واوسع ومجتمعنا لا يريد ان يتعلم ويمضي السنين في اللعب واللهو والساعات في مشاهدة الكرة واللعاب الفيديو ولا يدرس اي لغة .
ثقنية الدوت نت لها اسلوب خاص بحسب رايي عندما تتعلمها تصنع لنفسك مكتباتك وفئاتك الخاصة التي تستخدمها في كل مرة تبداء البرمجة .
مثلا مكتبات للتعامل مع قواعد البيانات تبقى تككتبها ليوم او يومين وتستخدمها فيما بعد لسنين بدون ان تكتب الكثير من الكود .
وهو ما قلته انت الان تقول عندي مكتبات ودروس للـ VB 6 طبعا لن تستطيع الرحيل من هذا المستنقع اذا عالم اخر اذا لم يكن معك له ادواته ومكتباته ودروسه .
ارجوا ان اكون قد اوضحت الصورة