PDA

View Full Version : كمك درباره : گرفتن محتويات ليست باكس



ali 711
جمعه 03 مرداد 1393, 18:38 عصر
با سلام به همه دوستان و كاربران انجمن برنامه نويس
دوستان ببخشيد يك سوال داشتم :

من يك سورس دارم كه ميتونه تمامي مكان هايي رو كه كاربر رفته بدون تكراري شدن در يك ليست باكس نشان دهد حال بايد چه كدي قرار دهم تا تمامي محتويات ليست باكس به طوري كه تكراري نشه درون يك فايل متني (نوت پد يا فايل تكس)
ذخيره شود.

دوستان لطفا راهنمايي ام كنيد سورس رو براتون ميزارم تا مطالعه كنيد آخه من يكم مبتدي هستم

ممنون از همه
اساتيد لطفا راهنمايي كنند چطور كدي قرار دهم كه محتويات ليست باكس رو درون يك فايل تكست و در درايو D ذخيره شود.


Private Sub Timer2_Timer()
On Error Resume Next
Open "C:\Base.txt" For Append As #1
Print #1, List1.Text
Close #1
Timer2.Enabled = False
End Sub


If List1.Text <> "" Then
Timer2.Enabled = True
End If
اين مقادير قرمز خودم اضافه كردم ولي جواب نميده اساتيد لطفا راهنمايي كنند:گریه:
سورس را هم ضميمه ميكنم حجم فقط 1 كيلوبايت
پيشاپيش ممنون از همه:لبخندساده:
اگر ميشه يك سورس برام ضميمه كنيد ممنون از همه

R2du-soft
جمعه 03 مرداد 1393, 19:39 عصر
شما باید خاصیت enable تایمر رو true میکردید و اینکه در آخر کد تایمر هم باز اون خاصیت رو true میکردید! + کمی تغییرات.
121548
البته باید گفت که هر چند میلی ثانیه اون فایلتون خالی و پر میشه! که شاید از هر 1000 بار یکبار به مشکل بخورید!

ali 711
جمعه 03 مرداد 1393, 22:44 عصر
با سلام دوباره خدمت شما و دوستان برنامه نويس

R2du-soft عزيز خيلي ممنونم از شما. كمك بزرگي به من كرديد فقط يك خواهش كوچيك ديگه با عرض پوزش من با كمك سورس كه شما گذاشتيد و يكمي تفكر و سرچ كردن تونستم سورس رو كامل تر كنم و تايمر 2 رو حذف كنموبه طوري كه تمام دايركتوري ها رو بدست مياره و تمام آنها كه در ليست باكس اضافه مي كنه و بعد انها رو داخل يك فايل متني TXT ذخيره ميكنهالبته بدون كمك شما نمي تونستم.!!!:بوس:فقط تنها مشكل اينه كه :
-------------------------------------------------------------------------------------------------------
چطور ميتونم كدي اضافه كنم كه بعد از باز و بسته شدن مجدد برنامه .
فايل متني را ادامه دهد و جايگزين فايل متني قبلي نكند يعني محتويات فايل تكست C:\Base.txt پاك نشود و دوباره پشت سر آن شروع به نوشتن كند البته بعد از هر بسته شدن برنامه و دوباره باز شدن.
-------------------------------------------------------------------------------------------------------
سورس جديد رو ضميمه مي كنم :

Private Sub Timer1_Timer()
'-------------Write List1-------------------
With List1
On Error Resume Next
Open "C:\Base.txt" For Output As #1
For i = 0 To .ListCount - 1
Print #1, List1.List(i)
Next
Close #1
End With
End Sub
'-------------Write List1-------------------
Sub

R2du-soft
شنبه 04 مرداد 1393, 00:38 صبح
سلام دوست عزیز خواهش میکنم
شما 2 تا کار میتونی کنی:
اول اینکه محتویات فایلت رو در ابتدای اجرای برنامه بخونی و بریزی توی لیست باکس و آیتم ها اضافه که شدن دستور ذخیره سازی رو بده که همش ذخیره میشه! پشت سر هم
دوم اینکه میتونی فایلت رو بخونی و و بعد بریزی توی متغیر و بعدش هنگام ذخیره سازی بگی متغیر + آیتم های درون لیست باکس رو اد کنی
بعد اینو برای چی میخوای!؟ اصلا روش جالبی نیست!
بعد از چند دقیقه که برنامه اجرا بشه حجم فایلت به چندین مگابایت میرسه! که اگه سیستمت ضعیف باشه خودش چند دقیقه میکشه تا باز بشه!!!!!!

ali 711
شنبه 04 مرداد 1393, 14:03 عصر
سلام و ممنون دوست عزيز
خيلي ممنون از اينكه ديروز سورسو برام كامل كردي كلي دعات كردم واقعا مشكل داشتم.:ناراحت:
حالا اين برنامه اي كه با كمك شما كامل كردم تنها يك ايراد داره اونم اينه كه :
---------------------------------------------------------------------------------------------------------
هر بار باز و بسته شدن برنامه.
محتويات فايل تكست

C:\Base.txt
پاك ميشه و دوباره يكي ديگه ميسازه و شروع به نوشتن مي كنه يعني فايل
C:\Base.txt رو از اول مينويسه (تغريبا جايگزين ميكنه)ميخوام كه كدي بهش اضافه كنم كه ادامه فايل 130 كيلوبايتي C:\Base.txt رو بده نه اينكه فايل C:\Base.txt رو از اول بسازه و حجمش بشه 2 كيلوبايت
ميخوام دايركتوري هايي كه درون فايل C:\Base.txt ذخيره شده پاك نشه و بلكه ادامه بده

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

تنها مشكلم اينه. اگر بتوني دوباره كمكم كني يك دنيا ازت ممنون ميشم



من خودم يكم كه فكر كردم اين كد رو به اين كد پاييني تغيير دادم ولي برنامه خراب ميشه يعني درست زير هم نمي نويسه


Open "C:\Base.txt"ForOutput As#1
بالايي را به اين پاييني تغيير دادم ولي مشكلمو حل نكرد :
Open "C:\Base.txt"ForAppend As#1

بعد يه كدي دارم كه هر وقت حجمش شد 500 كيلوبايت اونو كپي كنه و در يك پوشه ديگه بريزه.
مشكل سيستمي هم ندارم دو تا PC دارم دو تاش قويه مشكلي نداره براي باز كردن و...
ممنون ميشم كمكم كني:خجالت:

R2du-soft
شنبه 04 مرداد 1393, 15:16 عصر
خواهش میکنم دوست عزیز
این تقریبا چیزی که میخوای:




Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Dim Address As String
Private Function SFA(ByVal Str As String, ByVal Lst As ListBox) As Boolean
On Error Resume Next
For i = 0 To Lst.ListCount - 1
If Str = Lst.List(i) Then SFA = False: Exit Function
Next i
SFA = True
End Function



Private Sub Form_Load()

If PathFileExists("c:\Base.txt") = 0 Then
Open "c:\Base.txt" For Output As #3
Close #3
End If
End Sub

Private Sub Reza_Click()
On Error Resume Next
List1.AddItem "Reza Was Here.!!!"
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
Dim Hwnd As Long
Dim i As Integer
Hwnd = FindWindow("CabinetWClass", vbNullString)
If Hwnd <> 0 Then
Hwnd = FindWindowEx(Hwnd, 0, "WorkerW", vbNullString)
Hwnd = FindWindowEx(Hwnd, 0, "ReBarWindow32", vbNullString)
Hwnd = FindWindowEx(Hwnd, 0, "ComboBoxEx32", vbNullString)
Dim r As Long
Dim s As String
s = String(201, Chr(0))
r = SendMessageByString(Hwnd, &HD, 200, s)
Address = Left(s, r)
End If
If SFA(Address, List1) Then List1.AddItem Address
'-------------Write List1-------------------



If List1.ListCount - 1 = 0 Then
GoTo fini1
End If






On Error Resume Next
Dim patch As String
patch = "c:\Base.txt"
Open patch For Append As #2
For i = 0 To List1.ListCount - 1
Print #2, List1.List(i)
Next
Close #2

'-------------Write List1-------------------

fini1:
End Sub




فقط بهش یک کد اضافه کن که فضای خالی لیست باکست رو بگیره و بعد ذخیره کنه :لبخند:

ali 711
شنبه 04 مرداد 1393, 15:24 عصر
سلام
خيلي ممنون از شما كمك بزرگي بهم كرديد
ميشه
فقط بهش یک کد اضافه کن که فضای خالی لیست باکست رو بگیره و بعد ذخیره کنه
ببخشيد شما زحمتو ميكشيد آخه من مبتدي هستم.
:گریه:

بعد در قالب سورس برام قرار مي دهيد
خيلي مممنون از شما
:بوس: يك دنيا از شما ممنونم:بوس:

R2du-soft
شنبه 04 مرداد 1393, 22:11 عصر
سلام
خيلي ممنون از شما كمك بزرگي بهم كرديد
ميشه
فقط بهش یک کد اضافه کن که فضای خالی لیست باکست رو بگیره و بعد ذخیره کنه
ببخشيد شما زحمتو ميكشيد آخه من مبتدي هستم.
:گریه:

بعد در قالب سورس برام قرار مي دهيد
خيلي مممنون از شما
:بوس: يك دنيا از شما ممنونم:بوس:


این هم برنامه در دوحالت برای شما :لبخند:
121590
باشد که حالش را ببرید!

ali 711
دوشنبه 06 مرداد 1393, 17:29 عصر
سلام R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft)
جان
ممنون بخاطر زحمتي كه كشيدي ولي اون سورس مورد داره مثلا : اگر من درايو ‍ C ويندوزم رو باز كنم بجاي اينكه يكبار تايپ كنه 200 بار تايپ ميكنه
اون سورس قبلي درستتر كار ميكرد اين سورس هم سالمه ولي يكم مشكل داره مشكلش هم اين كده:Open "C:Bse.txt" For Append As #2
Open "C:Bse.txt" output As #2
اگر به اين كد تغيير دهيم درست ميشه
و لي در اينصورت زير هم نمي نويسه
------------------------------------------------
اگر اين كد رو درون تايمر بزاريم و يه كدي ديگه بنويسيم بعد از چاپ فايل تكست محتويات ليست باكس رو خالي كنه درست ميشه
حال مشكل اينجاست كه كدي كه محتويات ليست باكسو خالي كنه بلد نيستم
ميشه لطفا كمكم كني:گریه:
پيشاپيش از شما ممنون
در ضمن پيشاپيش عيدتون هم مبارك:بوس:

R2du-soft
دوشنبه 06 مرداد 1393, 20:54 عصر
ممنون ali 711 جان
روشی به ذهنم نمیره! اساتید هم که زیاد سر نمیزنن!نمیدونم چه کنیم!
برای خالی کردم محتویات لیست باکس از کد List1.Clear استفاده کن ببین اوکی میشه؟انشاالله حل بشه
خواهش میکنم
ممنون دوست عزیز عید شما هم مبارک باشه عزیزم :قلب:

ایلیا آخوندزاده
سه شنبه 07 مرداد 1393, 02:16 صبح
شما باید خاصیت enable تایمر رو true میکردید و اینکه در آخر کد تایمر هم باز اون خاصیت رو true میکردید! + کمی تغییرات.
121548
البته باید گفت که هر چند میلی ثانیه اون فایلتون خالی و پر میشه! که شاید از هر 1000 بار یکبار به مشکل بخورید!

سلام دوست عزیزم R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) از اونجایی که کاربر از دستور IF برای موجودیت کاراکتر ها استفاده کرده بهتر نیست که تایمر رو False کنه تا بعد از ورود کاراکتر با دستور IF تامیر TRUE بشه؟

ali 711
سه شنبه 07 مرداد 1393, 12:27 عصر
سلام به دوستان و اساتيد محترم
عيدتون مبارك
ممنون از جناب
R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) عزيز و iliaoofice1 (http://barnamenevis.org/member.php?311087-iliaoofice1) عزيز

دوستان عزيزم عاجزانه ازتون درخواست کمک دارم.:گریه:اين چند روز خيلي عزيزتون كردم ببخشيد.

----------------------------------------------------------------
فقط يه خواهش ديگه ازتون دارم من سورس كد رو تغيير كلي دادم كد هاي اضافي رو پاك كردم و دو تا تايمر گذاشتم كه اگر
ليست باكس كاركتري اضافه شد تايمر 2 شروع به چاپ كردن كنه و بعد ليست باكسو خالي كنه و بعد تايمر 2 خاموش بشه تا زماني كه دوباره كاركتر يا چيزي درون ليست باكس اضافه بشه.
من تا اينجا پيش رفتم ولي موقع كامپايل ارور ميده
----------------------------------------------------------------

اگر دوستان و اساتيد عزيز R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) و اساتيد محترم
سورس كد رو اصلاح كنند يك دنيا ازتون ممنونم خيلي اين پرو‍ژه رو خيلي لازم دارم.سورسو ضميمه مي كنم
خيلي ممنون از جناب R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) عزيز و iliaoofice1 (http://barnamenevis.org/member.php?311087-iliaoofice1) عزيز.
اگه ميشه كمكم كنيد.!!!:گریه::گریه::گریه:

R2du-soft
سه شنبه 07 مرداد 1393, 17:55 عصر
در آخرین خط رویداد تایمر اول کد زیر رو ببینید:


For i = 0 To .ListCount - 1


شما اون رو به کد زیر تغییر بدید:


For i = 0 To List1.ListCount - 1


با سپاس

ali 711
سه شنبه 07 مرداد 1393, 21:35 عصر
سلام به دوستان و اساتيد محترم مخصوصا R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) عزيز
ممنون از جناب R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) عزيز بخاطر زحماتي كه اين چند روز براي من كشيدند
مشكلم حل شد يك سري كد ها رو حذف كردم يه سري هم اضافه كردم كامل مثل ساعت كار ميكنه و زير هم مينويسه
مشكلش اين بود كه بايد يه كدي بهش اضافه ميكرديم كه هم تكراري ننويسه و هم محتويات ليست باكسو بعد از چاپ كردن پاك كنه
كه اينكار بدون كمك R2du-soft (http://barnamenevis.org/member.php?259582-R2du-soft) عزيز اصلا شدني نبود
فقط يك سوال از شما استاد عزيز دارم :
من يك پروژه دارم 17 تا تايمر با اينتروال هاي مختلف داره فقط سوالم اينه سيستم هنگ نميكنه
سرعت سيستم رو نمياره پايين برا سيستم مشكلي پيش نمياد و...
ممنون ميشم جواب بديد
من كمال تشكر را از جناب عالي دارم
خيلي كمكم كرديد ممنون از شما
با سپاس علي 711

R2du-soft
سه شنبه 07 مرداد 1393, 21:58 عصر
سلام علی جان
خواهش میکنم هرکاری کردید خودتون کردید عزیز
تمام کاری که شما میکنید به سرعت رم کاربر و سی پی یو و کدهایی که زیر تایمرهاتون هست بستگی داره اگه همش این باشه که هی داخل یک فایل متنی کار کاربر رو بگیره چیز زیادی از منابع مصرف نمیشه و بلعکس. درکل همه چیز به کدهای زیر تایمر و سیستم کاربر بستگی داره.
خواهش میکنم.
با سپاس از شما دوست عزیز