الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحدي الكبير

مغلقرائج
بدأه ANSI في 3 يوليو 2005 · 178 رد · 15,970 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#101

لو كتبت عدد في تكست بوكس و اردت تحويله الي صيغة عملة مثلا 120.5$ اذا كانت $ هي علامة العملة في جهازك

او 120.5 ر.س اذا كانت ر.س هي رمز العملة

فما هو الامر ؟

الحل

من قال لا إله إلا الله صادقا دخل الجنة

موقعي للتعارف و تبادل الأخبار http://www.xybond.com

#102

وعليكم السلام ورحمة الله

تحية طيبة لأخي العزيز رغيد الطيب

كحل لسؤالك.. فلم أجد وسيلة بدون استخدام دالة API سوي هذا الكود

والذي يعمل فقط إذا لم يكن البرنامج موضوع داخل مجلد الفيجوال بيسيك.

 Private Sub Form_Load()
Show
If InStr(1, App.Path, "Program Files\Microsoft Visual Studio\VB98") <> 0 Then
 MsgBox "Running From Visual Basic Environment"
Else
 MsgBox "External EXE"
End If
End Sub

أما إذا أتحت لي استخدام دالة API فسأستخدم دالة GetModuleName هكذا:

Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Const GWW_HINSTANCE = (-6)
Private Sub Form_Load()
     Dim ModuleName As String
     ModuleName = String$(200, Chr$(0))
     GetModuleFileName 0, ModuleName, Len(ModuleName)
     ModuleName = Left(ModuleName, InStr(1, ModuleName, Chr(0)) - 1)
    Text1 = ModuleName
     If InStr(1, ModuleName, "PROGRAM FILES\MICROSOFT VISUAL STUDIO\VB98\VB6.EXE") <> 0 Then
        MsgBox "Running From Visual Basic Environment"
     Else
        MsgBox "External EXE"
    End If
     
End Sub
#103

اخي رغيد الطيب حفظه الله

انا وجدت حل شغال 100% ولكن لا اعتقد انه نفس الكود الاحترافي الذي تبحث عنه

نقوم بنسخ برنامجنا الى اي موقع في الوييندوس ( طبعا بعد تحديد المسار الصحيح لويندوس عن طريق دوال الapi

فاذا تم نسخ البرنامج فذلك يعني ان البيئة تنفيذية اما اذا اعطى خطا فذلك يعني ان البرنامج في مرحلة التطوير لذلك لم يستطع ان ينسخه

من دروسي :

درس مبسط لفهم ال VB6.... Resource File

تعلم تصميم اداة ال Active X خطوة بخطوة (الجزء الأول)

الطريقة المثلى للتعامل مع مسجل النظام( VB6..... (Registry

من برامجي :

Abo Sabreen Messenger v2.1 العملاق

--------------------------------------------------

مفكرة الإسلام؛ طالع أخبار العالم وأخبار المجاهدين بعيدا عن التعتيم الاعلامي.

#104

لقد وجدت طريقتين ذكيتين في مقالة أجنبية من موقع About.com

أرجو المعذرة لأني لم أستطع أن أجد حلاً من ابتكاري بدون استخدام API:

الطريقة الأولى:

Private Function TestIDE() As Boolean
     On Error GoTo IDEInUse
     Debug.Print 1 \ 0 'division by zero error
     TestIDE = False
     Exit Function
IDEInUse:
     TestIDE = True
End Function

Private Sub Command1_Click()
If TestIDE() = True Then
    MsgBox ("Running under IDE")
Else
    MsgBox ("Running as EXE")
End If
End Sub

الطريقة الثانية:

'You can check this flag anywhere in your code
Public IsIDE As Boolean

Private Sub Form_Load()
    IsIDE = False
    'This line is only executed if
    'running in the IDE and then
    'returns True
    Debug.Assert CheckIDE
    'Use the IsIDE flag anywhere
    If IsIDE Then
        MsgBox ("Running under IDE")
    Else
        MsgBox ("Running as EXE")
    End If
End Sub

Private Function CheckIDE() As Boolean
    'This function will never be executed in an EXE
    IsIDE = True        'set global flag
    'Set CheckIDE or the Debug.Assert will Break
    CheckIDE = True
End Function

تم تعديل هذه المشاركة بواسطة aroma_kt في 18 يوليو 2005 في 15:02

#105

بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله وبركاته

اولا اقول مرحبا بك عزيز (بانورما جي) اجابتك سليمة اكيد في حال تنزيل الفيجول بيسك الى مساره الافتراضي وكان البرنامج خارج ذلك المسار و جميل ان اذكر بانه يمكن معره المسار الذي قام المستخدم بتنزيل الفيجوال بيسك اليه عن طريق المفتاح التالي في الريجستري :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual Basic\ProductDir

حيث ان الفجيوال بيسك مثلا في جهازي الشخصي محمل في المسار D:\Programming\Visual Studio 6\VB98 و ليس كالمعتاد !

هذا بالاضافة الى جمال طريقتك باستخدم الـ API و يمكن ايضا تحويرها قليلا و الاعتماد على اسم الفئة الخاصة بالفورم الرئيسية و التي تكون اثنا التصميم ThunderFormDC و تصبح بعد الترجمه ThunderRT6FormDC و منه يمكن إستغلال دالة الـ API المسماه GetClassName لتحديد نوع التشغيل بشكل مشابه للتالي :

Private Sub Form_Load()
    Dim clsName As String * 16
    GetClassName Me.hwnd, clsName, 17
    MsgBox IIf(InStr(clsName, "RT6"), "EXE File", "Inside VB6")
End Sub

بالنسبة للاخ العزيز aroma_kt تمنيت ان تضع اجابتك عزيزي دون البحث عنها حتى و إن كانت بالـ API فجميل ان نتناقش و نحاول سويا .. اما الطريقة التي وجدها في الموقع المذكور فهي الطريقة التي استخدمتها انا في الكود الذي جهزته كحل لهذا اللغز وهو مطابق تماما للطريقة الثانية التي وضعتها :

Dim Inside As Boolean
Private Sub Form_Load()
    Debug.Assert True Or OK
    MsgBox IIf(Inside, "Inside VB6", "EXE File")
End Sub
Function OK()
    Inside = True
End Function

اما عن كيفية عملها فهي تعتمد على مبدأ مهم في الفيجوال بيسيك وهو مبدأ مصحح الاخطاء Debugger حيث ان الـسطور التي تحتوي على Debug يتم التعامل معها فقط من خلال بيئة التطوير من اجل تعقب الاخطاء بينما عند ترجمة الملف فإنه يتم إزالة الـ Debugging منه و بالتالي فان قيمة المتغير Inside لن تصبح True إلا في حالة و احدة وهي ان يتم استدعاء الدالة ()OK وهي اصلا يتم استدعاها من سطر فيه Debug اي انه يتم استدعاء الدالة اذا كنا نعمل من داخل الفيجوال بيسك او يلغى سطر الاستدعاء بالكامل في حالة كوننا نعمل من خارج الفيجوال بيسك.

تحياتي للجميع

السلام عليكم و رحمة الله و بركاته

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 18 يوليو 2005 في 15:22

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#106

السلام عليكم

أهلا أخي و استاذي رغيد و الله غبت علينا باين انك مش بتشارك غير في التحديات :)

يبدو اني دخلت متأخر ووجدت ان الشباب قامو بالعمل تبارك الله و أتو بكل الحلول تقريبا

المهم أتمنى أن تتقدموا و أنا سأحاول تحضير سؤال سخن ان شاء الله قريبا جدا

يالله السلام عليكم و رحمة الله

#107

سؤال :

أريد عمل برنامج يتحقق من كلمة السر دون اللجوء الى أي تعبير شرط ولا أي شئ آخر خارجي

يالله الهمة يا شباب

#108

للمعلومات الإضافية، هذا لتنفيذ برنامج الترتيب التصاعدي والتنازلي بالجافا،

ميزاته الإضافية:

1- أنه ينفذ أمر الترتيب بشكل أسرع بكثير من طريقة عمل الترتيب في الأمثلة السابقة!!

2- أنه أقصر بكثير من الشفرة الماضية.

import java.util.*;
public class Test{
	public static void main(String []args){
  int size=200;

  Vector randomVector=new Vector();
  for(int i=0;i<size;i++){
 	 randomVector.add((int)(Math.random()*1000));
  }
  Vector ascendingVector = (Vector)randomVector.clone();
  Collections.sort(ascendingVector);
  Vector decendingVector=(Vector)ascendingVector.clone();
  Collections.reverse(decendingVector);

	}
}
#109

كيف يتحقق من الكلمة من غير شرط؟ True Flase?

عجيب!!

#110

السلام عليكم ورحمة الله وبركاته

هناك حل بسيط لسؤال الأخ Crazy اذا فهمت جيدا السؤال طبعا

ليكن لدينا تكست وكومند فقط نعطل الكومند بوضع enabled=false

وفي الحدث text_change نكتب

a = StrComp(Text1.Text, "pass", vbTextCompare)
Command1.Enabled = CBool(a + 1)

وبهذا يتم تفعيل الكومند اذا كانت كلمة المرور صحيحة وهي pass

أرجو أنني قد وفقت

بالتوفيق للجميع

#111

سبقتنى اخى DramNet فأنا كنت سأضع نفس الحل

اتمنى ان يكون هو المطلوب :rolleyes:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#112

نعم هذا حل ممكن لكن يشتغل فقط في الحلة التي قلتها يعني تفعيل بوتن مثلا لكن ماذا لو أردت اظهار فورم او مسج بوكس ؟؟؟

#113

حل أخر لسؤال أخي رغيد الطيب وبدون استخدام دالة API:

Private Sub Form_Load()
Show
Open App.Path & "\" & App.EXEName & ".exe" For Binary As #1

If LOF(1) = 0 Then
   MsgBox "Running From VB Environment"
Else
   MsgBox "External EXE"
End If
Close #1
End Sub

وبالنسبة لسؤال أخي Crazy-Man فأرجو أن تذكر لنا كافة الجمل الشرطية بعينها التي لا تريد لنا استخدامها..

#114
a = StrComp(Text1.Text, "pass", vbTextCompare)

لم أقتنع، فهذه جملة شرطية اسمها StrComp ترجع قيمة Boolean !!

Public Function StrComp(word1 as String, word2 as String, anything as Object) as Boolean
if word1=word2 then
StrComp=true
else 
StrComp = False
end if
end sub

أنت فقط أخفيت جملة الشرط بمناداة أمر يفعل المهمة عنك!!!

تم تعديل هذه المشاركة بواسطة أبومازن في 19 يوليو 2005 في 01:23

#115

أخي العزيز كل الجمل الشرطية بدون استثناء

بالنسبة لحل الأخ حلم فهو خاطئ 100/100 ... لأن ال StrComp ترجع 3 قيم -1 و 0 و 1

-1 => عندما يكون النص الأول أصغر (طولا) من النص الثاني
0  => عندما يكون النصان ذوا نفس الطول// اذا يمكننا هنا ادخال أي كلمة سر لها نفس طول الكلمة الأصلية و بهذا نحصل على النتيجة المرادة 
1  => عندما يكون النص الأول أكبر من النص الثاني // اذا أدخل أي نص كيفما كان أطول من الكلمة الأصلية و هكذا تجتاز الحاجز

في اتظار الحل

#116

صعب أخي Crazy-Man ألا نستخدم شرط..

لأنه حتي الدوال العادية التي نستخدمها مثل StrComp هي في الأصل عبارة عن مجموعة شروط..ربما تبدو من الفيجوال بيسيك كأننا لا نستخدم شرط..لكنها في الواقع دالة يتم تمرير معاملات عبرها حتي تدخل تلك المعاملات لشروط تبعا للكود..

فمثلا يمكنني أن انشأ DLL وأكتب به دالة مثل strComp ولتكن StrCompare وأستخدم مجموعة من الشروط داخلها لمقارنة النص بحيث أمرر لها من داخل الفيجوال بيسيك معاملات النص المراد مقارنته وأقوم بإرجاع قيم .. عن طريقها أستطيع اتخاذ القرار .

فلا تستطيع أن تلومني في تلك الحالة, حيث أنني لم أستخدم أي شرط داخل الفيجوال بيسيك.

وأيضا دوال ال API مثل CompareString و lstrcmp عبارة عن مجموعة شروط..

فكيف بالله عليك.. لا نستطيع أن نستخدم شرط..

--------

أرجو فعلا منك أن تضع حلك قريبا..ولن نختلف في كون الدالة التي تستخدمها شرط أم لا.. المهم الطريقة..

#117

بلى يمكن أخي Pharonic

و طبعا لا يمكنك استعمال الطرق التي ذكرت كعمل DLL (لأنك كتبتها بيديك :D ) و لكن حتى لو استعملت ال API التي ذكرتها مثلا Compare String و lstrcmp فعملهما مثله مثل عمل ال StrComp و انا ذكرت في ردي السابق مساوئ هذه الطريقة يعني يلزمك التحقق من النتيجة المرجعة من هذين الدالتين حتى تعرف اذا كان الباسوورد صحيح

تم تعديل هذه المشاركة بواسطة crazy-man في 19 يوليو 2005 في 03:16

#119

تلك القطعة من ملف تكست يدعي VBCommands مع كتاب bible يحتوي علي جميع أوامر الشروط ومنها on error

لاحظ أنك ستجد جمل Loops بين أوامر الشروط ليس لها دخل بأوامر الشروط.

Loops and Conditional Decisions
While the event-driven model of VB has taken out a lot of the need for controlling the flow of your application, don't think for a second that you can get by without being an expert on these features of VB. Virtually every single procedure you'll ever write will have one or more of these in it. The concepts are simple, so take the time to become a master of each one! The For...Next and the Select Case statements are the two most used, so concentrate on them first.

If..Then..Else - Performs code based on the results of a test 
If A>5 Then Print "A is a bit number!" 
For...Next - Loops a specified number of times 
For i = 1 to 5: print #1, i: next i 
For Each ... Next - Walks through a collection 
For Each X in Form1.controls: Next X 
While...Wend - Loops until an event is false 
while i < 5: i = i +1: wend 
Select Case - Takes an action based on a value of a parameter 
select case i 
case 1 : print "it was a 1" 
case 2 : print "it was a 2" 
end select 
Do...Loop - Loops until conditions are met 
do while i < 5 : i = i + 1 : loop 
IIF - Returns 1 of two parts, depending on the value of an expression 
result = IIF (testexpression, truepart, falsepart) 
Choose - Selects and returns a value from a list of arguments 
Choose (index, "answer1", "answer2", "answer3") 
With - Executes a series of statements on a single object 
With textbox1 
.Height = 100 
.Width = 500 
End With 
End - Immediately stops execution of a program 
End 
Stop - Pauses execution of a program (can restart without loss of data) 
Stop 
Switch - Returns a value associated with the first true expression in a list 
result = Switch (testvalue1, answer1, testvalue2, answer2) 
GoTo - Switches execution to a new line in the code 
GoTo Line1 
GoSub ... Return - Switches execution to a new block of code and then returns 
GoSub Line1 
On .. GoSub - Branch to a specific line of code then return at the next Return statement 
On Number GoSub Line1, Line2, Line3 
On .. GoTo - Branch to a specific line of code 
On Number GoTo Line1, Line2, Line3 
Special Values
There are some keywords in VB which take on special meaning. Their use can be confusing at times, but you'll get used to the terminology as your programming experience grows.

True - A logical (Boolean) expression. In VB, its value is -1 
X = TRUE 
False - A logical (Boolean expression. In VB, its value is 0 
X = FALSE 
Nothing - Disassociates an object variable from an actual object 
Set X = Nothing 
Null - Indicates that a variable has no valid data 
X = Null 
Empty - Indicates that a variable has not yet been initialized 
X = Empty 
Error Handling
Try as I might, I cannot create error free code! So, I turn to these VB features to help me figure out what went wrong.

On Error - Enables an error-handling routine 
On Error GoTo Line2 (if error occurs, go to line2) 
On Error Resume Next (if error occurs, continue executing next line of code) 
On Error Goto 0 (disables error handling) 
Resume - Used to resume execution after a error-handling routine is finished 
Resume 
Resume Next 
Resume Line1
#120

لا يكون الحل باستعمال switch case فهذه أيضا شرطية!!

#122

حتى هذه شرطية!!!

وهي دالة خفية

On Error goto 10

call SomeStrangeCallThatThrowsAnErrorIfTheTwoStringsAreNotEqual(word1 as String, word2 as String)
call startProgram

end

10
printWrongPassword

End Sub

public Sub SomeStrangeCallThatThrowsAnErrorIfTheTwoStringsAreNotEqual(word1 as String, word2 as String) 
If word1 doesNotEqual word2
Throw New Error 123123123123123123123123123123123123123
End if
End Sub
#123
اقتباس
لتسهيل الأمر و ازالة الغموض يمكنكم استعمال On Error

كدة تبقى إتحلت

Private Sub Text1_Change()
On Error GoTo x
Dim pass As String
pass = "belalhamdy"
Sqr (Abs(Cr(Text1) - Cr(pass)) - 1)
Exit Sub
x:
MsgBox "كلمة السر صحيحة"
End Sub
Private Function Cr(St As String)
For crc = 1 To Len(St)
mk = mk + crc * Asc(Mid(St, crc, 1))
Next
Cr = mk
End Function
#124

السلام عليكم ورحمة الله وبركاته

أوافق الجميع

لذلك أرجو من الاخ crazy إعطاء حل المشكل الذي طرحه لانه يفترض أن يكون حل للمشكل المطروح أو التحدي مسبقا قبل وضعه

بالتوفيق للجميع دائما

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…