FOK!forum / Digital Corner / [Centraal] Visual Basic 6
JanMichielwoensdag 27 juli 2005 @ 14:17
Voor alle Visual Basic 6 vragen.

Is Dir de beste methode om te checken of een bestand aanwezig is in de folder en zo niet het bestand aan te maken? Ik heb het volgende gemaakt (voor het bestand 'data.mdb'):

1
2
3
4
5
6
7
8
9
Private Sub CheckFile()
If LCase(Dir("data.mdb") = "data.mdb" Then
   'the file is present
   Exit Sub
Else
   'the file is not present
   'code to create file here
End If
End Sub
Xsysstarwoensdag 27 juli 2005 @ 14:38
Nee, u moet het FileSystemObject gebruiken dat geleverd wordt bij het Microsoft Scripting Runtime (Reference zetten).

Public FSO as FileSystemObject

Module:
dim bExists as boolean
bExists = fso.FileExists("data.mdb")
enz.

Aanmaken van een database bestand kan, geloof ik, met Microsoft DAO (= niet ADO, heeft wel raakvlak). Let erop dat als u zowel ADO als DAO gebruikt, u al uw definities volledig defineert, vanwege de dubbele klassenamen.
dim db as ADO.Database
en niet:
dim db as Database

[ Bericht 36% gewijzigd door Xsysstar op 27-07-2005 14:40:36 (Aanvulling) ]
daReaperwoensdag 27 juli 2005 @ 14:40
ha, ik heb ook een mooie vraag

ik heb (VBA, overigens) een input boxje waar je een dir in kan vullen.

Met
1ChDir (directory.Value)
switch ik naar de ingevulde directory, echter, dit houdt geen rekening met eventuele schijfwisseling... Weet iemand hoe ik dit beter kan doen?
Xsysstarwoensdag 27 juli 2005 @ 14:42
quote:
Op woensdag 27 juli 2005 14:40 schreef daReaper het volgende:
ha, ik heb ook een mooie vraag

ik heb (VBA, overigens) een input boxje waar je een dir in kan vullen.

Met
[ code verwijderd ]

switch ik naar de ingevulde directory, echter, dit houdt geen rekening met eventuele schijfwisseling... Weet iemand hoe ik dit beter kan doen?
Met ChDrive .
JanMichielwoensdag 27 juli 2005 @ 15:08
quote:
Op woensdag 27 juli 2005 14:38 schreef Xsysstar het volgende:
Nee, u moet het FileSystemObject gebruiken dat geleverd wordt bij het Microsoft Scripting Runtime (Reference zetten).

Public FSO as FileSystemObject

Module:
dim bExists as boolean
bExists = fso.FileExists("data.mdb")
enz.

Aanmaken van een database bestand kan, geloof ik, met Microsoft DAO (= niet ADO, heeft wel raakvlak). Let erop dat als u zowel ADO als DAO gebruikt, u al uw definities volledig defineert, vanwege de dubbele klassenamen.
dim db as ADO.Database
en niet:
dim db as Database
Ok, bedankt voor de uitleg. Ik zal het straks proberen als ik op de andere computer zit.
daReaperwoensdag 27 juli 2005 @ 15:29
quote:
Op woensdag 27 juli 2005 14:42 schreef Xsysstar het volgende:

[..]

Met ChDrive .
Ja maar doe eens mooi functietje ofzo

En hoe dit dat met netwerk directory's? ( //share/bla )
Xsysstarwoensdag 27 juli 2005 @ 15:46
quote:
Op woensdag 27 juli 2005 15:29 schreef daReaper het volgende:

[..]

Ja maar doe eens mooi functietje ofzo

En hoe dit dat met netwerk directory's? ( //share/bla )
Nou, het mooie functietje :
1
2
ChDrive myDir
ChDir myDir


Netwerk kan niet; helaas .
JanMichieldonderdag 28 juli 2005 @ 11:40
quote:
Op woensdag 27 juli 2005 14:38 schreef Xsysstar het volgende:
Nee, u moet het FileSystemObject gebruiken dat geleverd wordt bij het Microsoft Scripting Runtime (Reference zetten).

Public FSO as FileSystemObject

Module:
dim bExists as boolean
bExists = fso.FileExists("data.mdb")
enz.

Aanmaken van een database bestand kan, geloof ik, met Microsoft DAO (= niet ADO, heeft wel raakvlak). Let erop dat als u zowel ADO als DAO gebruikt, u al uw definities volledig defineert, vanwege de dubbele klassenamen.
dim db as ADO.Database
en niet:
dim db as Database
Het wil nog niet helemaal lukken, ik heb het volgende gedaan.

Een reference geplaatst naar Microsoft Scripting Runtime.
Een module gemaakt met de volgende code:

1
2
3
Public FSO As FileSystemObject
Dim bExists As Boolean
bExists = FSO.FileExists("data.mdb")


En dan de variabele bExists in een sub testen, bijvoorbeeld:

1
2
3
4
Private Sub Form_Load()
If bExists = False Then
...
...


Wanneer ik de code wil uitvoeren (F5) geeft Visual Basic op het "data.mdb" gedeelte de foutmelding: Invalid Outside Procedure. Wat doe ik nu verkeerd?
Xsysstardonderdag 28 juli 2005 @ 11:43
Dat is mijn fout; ik haal module en sub door elkaar. Spijt me.

De FileSystemObject-definitie moet in de kop van de module (dat was goed).
In een sub kunt u met dat FSO-object vele functies aanroepen, waaronder FileExists. Oftewel: de bExists-definitie en het vullen ervan moet ook in Form_load.
JanMichieldonderdag 28 juli 2005 @ 11:49
quote:
Op donderdag 28 juli 2005 11:43 schreef Xsysstar het volgende:
Dat is mijn fout; ik haal module en sub door elkaar. Spijt me.

De FileSystemObject-definitie moet in de kop van de module (dat was goed).
In een sub kunt u met dat FSO-object vele functies aanroepen, waaronder FileExists. Oftewel: de bExists-definitie en het vullen ervan moet ook in Form_load.
1. Reference
2. Module:

1Public FSO As FileSystemObject


3. Sub:

1
2
3
4
5
6
Private Sub Form_Load()
Dim bExists As Boolean
bExists = FSO.FileExists("data.mdb")
If bExists = False Then
...
...


Correct? Ik dacht dat ik dit al geprobeerd had (zonder veel succes), maar zal het straks nog eens proberen.

Is het overigens noodzakelijk om de reference (object?) in een module te declareren? Of kan dat ook gewoon in een form?
Xsysstardonderdag 28 juli 2005 @ 12:02
quote:
Op donderdag 28 juli 2005 11:49 schreef JanMichiel het volgende:
Is het overigens noodzakelijk om de reference (object?) in een module te declareren? Of kan dat ook gewoon in een form?
Dat kan in principe overal (het FileSystemObject kan ook in een gewone sub gedeclareerd worden), maar afhankelijk van het soort referentie kan het verstandig zijn om één enkele instantie te maken van die referentie.

Een FileSystemObject is onveranderlijk en hetzelfde object kan dus door het hele programma door gebruikt worden. Indien u veel met dit object wil doen, kan het handig zijn het object eenmalig in een module (Public) te declareren. Mocht u het maar nodig hebben in één sub of functie, dan kan het gewoon in de desbetreffende sub of functie gedeclareerd worden (Dim).
LeeHarveyOswalddonderdag 28 juli 2005 @ 14:22
Ik ben een online game aan het maken, werkt opzich al redelijk loop tegen iets kleins aan:

Bij het versturen van de info van de wereld (welke gebouwtjes er gebouwd zijn) maak ik 1 lange regel die op de server in een database wordt gezet. Deze regel is alsvolgt opgebouwd:

base#(insert X coordinaat hier)#(insert Y coordinaat hier)#(welk nr. gebouw hier)#(insert X coordinaat hier)#(insert Y coordinaat hier)#(welk nr. gebouw hier)# etc etc.

Nu staan die gegevens in het programma in inbase(500,500)

Ik wil dat de gegevens op de server up2date blijven. Dus ik verstuur bij het bouwen van een gebouw die info over. Probleem daarbij is om de X en de Y gegevens, en het bijhorende gebouw in 1 regel te krijgen. Ik doe dat als volgt:

1
2
3
4
5
6
7
8
9
10
SendString = ""
For i = 0 To 500

 For a = 0 To 500
 SendString = SendString & inBase(i, a) & "#"
 Next a

Next i

frmConnection.wnsdata.SendData "base#" & SendString



Maar daar wordt mn spelletje ERG traag van

(lees: Hij bevriest voor een minuut of 5). En dat komt uiteraard de gameplay niet ten goede


Dus beste medemensjes, hoe dit op te lossen?
Xsysstardonderdag 28 juli 2005 @ 14:33
U kunt het beste klassen gebruiken. Indien u niet gewerkt hebt met klassen en verzamelingen (collecties), zegt u het dan even? Dan leg ik het wat verder uit.

[Class: clsBuilding]
1
2
3
4
5
6
7
8
Public Enum eBuildingType
     ebtHeadquarters = 0
     ebtTaxOffice = 1
End enum  'De nummers mogen weggelaten worden (de '=' moet dan ook weg)

Public BuildingType as eBuildingType
Public X as integer
Public Y as integer


[Module]
1Public InBase as Collection

In deze module:
1
2
+Sub Init+
Set InBase = new Collection


1
2
3
4
5
6
7
8
9
+Function GiveBuildings+
dim b as clsBuilding, s as string
s = "#"
for each b in InBase
    s = cstr(b.BuildingType) & "#" & cstr(b.X) & "#" & cstr(b.Y) & "#"
next

'Hier kunt u nu doen wat u wilt; ik doe even debug.print s.
debug.print s
LeeHarveyOswalddonderdag 28 juli 2005 @ 14:40
De gebouwen zijn ook genummerd 0 voor huis, 2 voor barracks etc etc.

Dit gebeurt in een aparte module..

Alleen je For-next lus snap ik niet echt, en Collection? (het gaat om een (Veels te groot, ik ga hem ook verkleinen) veld van 500x500 gebouwtjes, dus 250 000 gebouwtjes)
Xsysstardonderdag 28 juli 2005 @ 14:57
Het nummeren van sóórten gebouwen doe ik met Enum (dat is gewoon een lijst met cijfers die een naampje krijgen).

Mocht dat niet genoeg zijn (dat zal snel het geval zijn), dan kunt u in plaats van een Enum, wéér een andere klasse maken (bijv. clsBuildingType) en nóg collection (bijv. Public Buildingtypes as Collection) in een module. In elk zo'n klasse (clsBuildingType) kunt u eigenschappen van het desbetreffende gebouw opgeven (BuildingName, DeltaStonePerTurn, BuildCostStone, enz).

+++
Ja, in de for-lus staat foutje; 'k zag het net
moet zijn: s = s & ....
("cstr" wordt gebruikt om integers e.d. om te zetten in een string.)

Met deze functie worden nu gewoon alle gebouwen uit de collectie gepakt en hun gegevens (x,y, type) achter elkaar geplakt.

Collections:
Een collection kan (i.t.t. een array) Objecten bevatten, elk met een unieke Key. Alle Toolbars (toolbar.buttons), Listviews (listview.listitem), treeviews (treeview.nodes) hebben een (of meerdere) collectie(s) waarin objecten (werkbalkknop, listviewpictogram, treeviewvertakking) geplaatst worden. Zelfgemaakte objecten (=klassen) kunt u hier ook in plaatsen.

Dat is wat ik hier ook heb gedaan:
Public colCollection as collection 'Collectie defineren=geheugenplaats vrijmaken

Sub init
set colCollection = new collection 'Setten=geheugenplaats vullen met een nieuwe collectie (want u zou ook een kopie van een bestaande collectie kunnen maken (set colCollection = colOld)
'Aangezien een collectie ook een object is, moet het geset worden; alle objecten die u in de programmacode maakt en wilt gebruiken, moeten geset worden.

dim c as clsNieuweKlasse 'Geheugenplaats vrijmaken
set c = new clsNieuweKlasse 'Nieuwe maken

debug.print "In de klasse zitten " & c.count & " objecten." 'Geen=0 objecten
colCollection.add tb, "Nieuwe klasse" 'Hiermee wordt "c" aan de collectie toegevoegd met de sleutel "Nieuwe klasse".
debug.print "In de klasse zit " & c.count & "object" 'Eén object.

If colCollection(1) is colCollection("Nieuwe klasse") then debug.print "Men kan een object in een collectie op twee manieren aanroepen: als getal (index) of als naam (key)"
if colCollection(1) is c then debug.print "Object 'c' is inderdaad gelijk aan colCollection(1)
end sub

Let u wel op dat bij een vergelijking (if-statement) objecten altijd met "is" (en niet =) worden vergeleken. Het setten van objecten gaat wel gewoon met het =-teken, maar i.t.t. strings en integers moet er dan het commando "set" voor, zoals u hebt kunnen zien.

Hopelijk is het duidelijk .
LeeHarveyOswalddonderdag 28 juli 2005 @ 15:49
Jup thnx overigens het probleem wel al op een andere manier opgelost: Simpelweg de maps kleiner maken. 250.000 gebouwtjes was wat te veel van het goede Nu gaat het overdragen snel genoeg. Echter, de volgende opdracht (Die een query uit laat voeren) geeft een foutmelding:

1AddRecord "INSERT INTO worldinfo (worldstring) VALUES ('" & convertstring & "')" & "WHERE username = '" & tempUsername & "'"
quote:
Er ontbreekt een puntkomma (;) aan het einde van de SQL instructie
Echter, dit is gewoon een iets aangepaste query die al werkte..
Xsysstardonderdag 28 juli 2005 @ 15:54
Hmm, dat lijkt SQL. Ik weet niet hoe de functie AddRecord werkt, maar ik denk dat de oplossing wel weet: achteraan het commando (vóór het laatste aanhalingsteken: AddRecord "Commando(Hier)" ) moet u de puntkomma plaatsen.
Als dit inderdaad niet werkt, misschien moet u een spatie plaatsen tussen het aanhalingsteken en WHERE in het deel [& "WHERE username =].
JanMichieldonderdag 28 juli 2005 @ 16:22
quote:
Op donderdag 28 juli 2005 11:49 schreef JanMichiel het volgende:

[..]

1. Reference
2. Module:
[ code verwijderd ]

3. Sub:
[ code verwijderd ]

Correct? Ik dacht dat ik dit al geprobeerd had (zonder veel succes), maar zal het straks nog eens proberen.

Is het overigens noodzakelijk om de reference (object?) in een module te declareren? Of kan dat ook gewoon in een form?
Volgens mij moet er ook nog iets met het Set command gebeuren in mijn code. Ik ben nog een beetje aan het inlezen over objects, maar elke hulp is meegenomen.
Xsysstardonderdag 28 juli 2005 @ 16:24
Ik heb niet zoëven iets gezien in uw code waar een Set commando gebruikt moet worden maar mocht u ergens met zitten (te twijfelen), dan zegt u het maar .
LeeHarveyOswalddonderdag 28 juli 2005 @ 16:27
quote:
Op donderdag 28 juli 2005 15:54 schreef Xsysstar het volgende:
Hmm, dat lijkt SQL. Ik weet niet hoe de functie AddRecord werkt, maar ik denk dat de oplossing wel weet: achteraan het commando (vóór het laatste aanhalingsteken: AddRecord "Commando(Hier)" ) moet u de puntkomma plaatsen.
Als dit inderdaad niet werkt, misschien moet u een spatie plaatsen tussen het aanhalingsteken en WHERE in het deel [& "WHERE username =].
De functie addrecord doet:

1
2
3
4
5
Public Sub AddRecord(query)
Dim AdoRec As ADODB.Recordset
Set AdoRec = AdoCon.Execute(query)
Set AdoRec = Nothing
End Sub


Dat met die puntkomma neerzetten heb ik geprobeerd, werkte helaas niet
JanMichieldonderdag 28 juli 2005 @ 16:27
Ik krijg bij het uitvoeren error code #91. Je kan het wel nalezen in de VB help index waarschijnlijk. Het helpdocument spreekt voor het gebruik van een object over het declareren van het object (gedaan) en het Set command. Maar ik heb momenteel te weinig kennis van objects om te weten het het Set command te gebruiken.
LeeHarveyOswalddonderdag 28 juli 2005 @ 16:30
Spatie was het ook niet.. zou het kunnen dat de query die ik doorgeef, te lang is?
Xsysstardonderdag 28 juli 2005 @ 16:30
quote:
Op donderdag 28 juli 2005 16:27 schreef LeeHarveyOswald het volgende:

[..]

De functie addrecord doet:
[ code verwijderd ]

Dat met die puntkomma neerzetten heb ik geprobeerd, werkte helaas niet
Dat Set = nothing is overbodig; VB doet dat zelf.
Het probleem zal hem wel in adocon liggen. Goede RecordType ofzo (Unknown, Table, enz, Command) gekozen?
Probeer anders eens een debug.print van de Query; misschien ziet u het dan ineens.
Xsysstardonderdag 28 juli 2005 @ 16:31
quote:
Op donderdag 28 juli 2005 16:30 schreef LeeHarveyOswald het volgende:
Spatie was het ook niet.. zou het kunnen dat de query die ik doorgeef, te lang is?
Zou kunnen; max 255 tekens ofzo?
Xsysstardonderdag 28 juli 2005 @ 16:32
quote:
Op donderdag 28 juli 2005 16:27 schreef JanMichiel het volgende:
Ik krijg bij het uitvoeren error code #91. Je kan het wel nalezen in de VB help index waarschijnlijk. Het helpdocument spreekt voor het gebruik van een object over het declareren van het object (gedaan) en het Set command. Maar ik heb momenteel te weinig kennis van objects om te weten het het Set command te gebruiken.
In LeeHarveyOswalds code kunt u zien hoe het met Dim en Set werkt. Kijkt u anders eens op Google of http://www.vbgroup.nl/Default.aspx?tabid=41. Er zijn vast wel minicursi te vinden.
LeeHarveyOswalddonderdag 28 juli 2005 @ 16:42
quote:
Op donderdag 28 juli 2005 16:30 schreef Xsysstar het volgende:

[..]

Dat Set = nothing is overbodig; VB doet dat zelf.
Het probleem zal hem wel in adocon liggen. Goede RecordType ofzo (Unknown, Table, enz, Command) gekozen?
Probeer anders eens een debug.print van de Query; misschien ziet u het dan ineens.
Wat op dat moment in mn variabele staat klopt volgens mij wel, nl:

INSERT INTO worldinfo (worldstring) VALUES ('base#0#0#0#0#<knip>0#0#') WHERE username = 'Jeroen'
Xsysstardonderdag 28 juli 2005 @ 16:58
quote:
Op donderdag 28 juli 2005 16:42 schreef LeeHarveyOswald het volgende:

[..]

Wat op dat moment in mn variabele staat klopt volgens mij wel, nl:

INSERT INTO worldinfo (worldstring) VALUES ('base#0#0#0#0#<knip>0#0#') WHERE username = 'Jeroen'
De heer des huizes kwam even langs en zei dat het aan de hekjes zou kunnen liggen. Volgens mij moet je voor het hekje, de bijbehorende HTML-code gebruiken (bijv.). Natuurlijk kunt u ook gewoon een ander teken gebruiken (of een gewone letter).
LeeHarveyOswalddonderdag 28 juli 2005 @ 17:01
hmmm maar dan zou er dus een aparte VB code moeten zijn voor een hekje?
Xsysstardonderdag 28 juli 2005 @ 17:06
Nee, dat maakt niet uit. Het gaat erom dat u waarschijnlijk een teken gebruikt dat niet wordt toegestaan. Probeert u eens het En-teken & i.p.v. het hekje.

Tip! Defineer in uw hoofdmodule (elk programma zou er één moeten hebben; meestal modMain genoemd) een constante voor dat scheidingsteken:
1Public Const sSep as string = "&"

Als u overal waar u nu het hekje gebruikt verwijst naar sSep, is er minder kans op typfouten en kunt u sneller veranderingen doorvoeren.

P.S. Ik ben benieuwd naar waarvoor dit alles dient. Wat voor soort spel moet het worden? En wat is al klaar? Ik heb namelijk zelf wel eens wat geprobeerd, maar als ik dan naga hoeveel er gebeuren moet, ben ik vrij snel genezen .
LeeHarveyOswalddonderdag 28 juli 2005 @ 17:09
quote:
Op donderdag 28 juli 2005 17:06 schreef Xsysstar het volgende:
Nee, dat maakt niet uit. Het gaat erom dat u waarschijnlijk een teken gebruikt dat niet wordt toegestaan. Probeert u eens het En-teken & i.p.v. het hekje.

Tip! Defineer in uw hoofdmodule (elk programma zou er één moeten hebben; meestal modMain genoemd) een constante voor dat scheidingsteken:
[ code verwijderd ]

Als u overal waar u nu het hekje gebruikt verwijst naar sSep, is er minder kans op typfouten en kunt u sneller veranderingen doorvoeren.

P.S. Ik ben benieuwd naar waarvoor dit alles dient. Wat voor soort spel moet het worden? En wat is al klaar? Ik heb namelijk zelf wel eens wat geprobeerd, maar als ik dan naga hoeveel er gebeuren moet, ben ik vrij snel genezen .
kent u het online spel nukezone? Zoiets maar dan iets grafischer...
LeeHarveyOswalddonderdag 28 juli 2005 @ 17:10
Ik ga even alle #jes zowel in de server als in de client vervangen met en tekens, daarna zet ik de exec. wel even online
LeeHarveyOswalddonderdag 28 juli 2005 @ 17:12
zelfde foutmelding met & ipv. #
Xsysstardonderdag 28 juli 2005 @ 17:16
Jammer; ik zal zo eens kijken naar nukezone. Eerst even wat nuttigen . afk tot 6:30 (hooguit)
LeeHarveyOswalddonderdag 28 juli 2005 @ 17:19
Smakelijk
Xsysstardonderdag 28 juli 2005 @ 18:31
Dank en daar ben ik weer. Ik heb even gekeken op http://www.nukezone.info/, aannemende dat het over het spel gaat waarnaar u verwees. Jammer dat er geen screenshots zijn.

Kent u trouwens DarkGalaxy? Ook al is er nu een beta, (is het offline) voor versie 5 en valt er vrij weinig te doen (www.darkgalaxy.com), als u van ruimte strategie (vooral strategie) spellen houdt, met allianties en veroveringscampagnes voeren dan kan dat best een leuk spel zijn.
LeeHarveyOswalddonderdag 28 juli 2005 @ 18:52
Ik bedoelde http://www.nukezone.nu/

Dat is een text based spel. Mijn spel is niet tekstbased: er is wel een Grafisch gebeuren, maar voor de rest lijkt het er wel op..
Xsysstardonderdag 28 juli 2005 @ 18:55
Ja, ik klikte op Manual en toen kwam ik op de .info-site. Ik ben bang dat ik me niet ga aanmelden (ik ben even uit het ontdekken van nieuwe spellen), maar ik ben wel benieuwd naar de eerste build van uw grafische versie.
Succes alvast .
LeeHarveyOswalddonderdag 28 juli 2005 @ 19:21
http://pestforum.nl/webwar.exe

Het uitvoeren van die query, waar hij dus op vast loopt, heb ik even uitgeschakeld. Server die standaard genoemd wordt ist, zelf even een user maken en aanmelden
Xsysstardonderdag 28 juli 2005 @ 19:24
Hmm, ik ben bang dat het pestforum gepest wordt door de "De pagina kan niet worden weergegeven"-foutmelding....
LeeHarveyOswalddonderdag 28 juli 2005 @ 20:00
jup.. server down
Xsysstardonderdag 28 juli 2005 @ 20:02
Laat je't me weten wanneer die weer open gaat? Dank alvast .
LeeHarveyOswalddonderdag 28 juli 2005 @ 20:09
quote:
Op donderdag 28 juli 2005 20:02 schreef Xsysstar het volgende:
Laat je't me weten wanneer die weer open gaat? Dank alvast .
http://www.pestforum.nl/webwar.exe

Server is 62.251.120.197

Edit: Server is weer online.

[ Bericht 12% gewijzigd door LeeHarveyOswald op 28-07-2005 20:18:12 ]
Xsysstardonderdag 28 juli 2005 @ 20:12
Uhm... Lycos doet wat moeilijk .

Stuur het anders naar -----@-------; per MSN (=idem) mag ook.

[ Bericht 11% gewijzigd door Xsysstar op 28-07-2005 20:19:22 ]
LeeHarveyOswalddonderdag 28 juli 2005 @ 20:19
Ik zie dat het inloggen gelukt is ik kan evt. ook wat gebouwtjes handmatig in de database prakken, om te laten zien dat het uitlezen wel werkt
Xsysstardonderdag 28 juli 2005 @ 20:22
Hehe; doe rustig aan. Ontwikkeling haasten is zelden goed .
JanMichielvrijdag 29 juli 2005 @ 15:42
quote:
Op donderdag 28 juli 2005 16:24 schreef Xsysstar het volgende:
Ik heb niet zoëven iets gezien in uw code waar een Set commando gebruikt moet worden maar mocht u ergens met zitten (te twijfelen), dan zegt u het maar .
Ik weet waarom het niet werkte. Je was New vergeten.

Er zijn twee opties.

1:
1Dim FSO As New FileSystemObject


2:
1
2
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
Xsysstarvrijdag 29 juli 2005 @ 16:01
Ach ja, natuurlijk. Onbewust weggelaten, waarschijnlijk vanzelfsprekendheid .
Laatste is sneller, veel sneller. Indien u een Publieke definitie wilt maken (Public FSO as FileSystemObject; in de header, zoals ik deed), kunt u het beste in de Form_Initialize (of Class_Initialize, enz) het Set-commando gebruiken. In modulen bestaat er niet zo'n voorgemaakte sub "Initialize", dus die moet u zelf even maken.
Chandlermaandag 1 augustus 2005 @ 12:28
Weet iemand hoe je kan werken met een collection?

ik heb een functie gevonden waarmee ik een tree kan uitlezen maar nu wil ik weten hoe ik de gegereneerde collection kan benutten..

iemand een idee

Tnx
Xsysstarmaandag 1 augustus 2005 @ 12:30
Ik zou graag willen helpen, maar ik weet niet echt wat u bedoelt.

Als u het treeview control bedoelt, de "Nodes" eigenschap is al een collection, dus hoeft niet apart uitgelezen te worden in een nieuwe collection.
Chandlermaandag 1 augustus 2005 @ 15:12
Ik heb de volgende functie (sub)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Function GetAllFiles(ByVal path As String, ByVal filespec As String, _
    Optional RecurseDirs As Boolean) As Collection
    Dim spec As Variant
    Dim file As Variant
    Dim subdir As Variant
    Dim subdirs As New Collection
    Dim specs() As String
    
    ' initialize the result
    Set GetAllFiles = New Collection
    
    ' ensure that path has a trailing backslash
    If Right$(path, 1) <> "\" Then path = path & "\"
    
    ' get the list of provided file specifications
    specs() = Split(filespec, ";")
    
    ' this is necessary to ignore duplicates in result
    ' caused by overlapping file specifications
    On Error Resume Next
                
    ' at each iteration search for a different filespec
    For Each spec In specs
        ' start the search
        file = Dir$(path & spec)
        Do While Len(file)
            ' we've found a new file
            file = path & file
            GetAllFiles.Add file, file
            ' get ready for the next iteration
            file = Dir$
        Loop
    Next
    
    ' first, build the list of subdirectories to be searched
    If RecurseDirs Then
        ' get the collection of subdirectories
        ' start the search
        file = Dir$(path & "*.*", vbDirectory)
        Do While Len(file)
            ' we've found a new directory
            If file = "." Or file = ".." Then
                ' exclude the "." and ".." entries
            ElseIf (GetAttr(path & file) And vbDirectory) = 0 Then
                ' ignore regular files
            Else
                ' this is a directory, include the path in the collection
                file = path & file
                subdirs.Add file, file
            End If
            ' get next directory
            file = Dir$
        Loop
        
        ' parse each subdirectory
        For Each subdir In subdirs
            ' use GetAllFiles recursively
            For Each file In GetAllFiles(subdir, filespec, True)
                GetAllFiles.Add file, file
            Next
        Next
    End If
    
End Function


nu kan ik deze functie uitlezen door

1set test = GetAllFiles("c:\etcetcetcpath", "*.*", true)


maar wat kan ik dan doen met test?
EggsTCmaandag 1 augustus 2005 @ 15:20
Als ik het zo snel doorlees kan je directories listen..
Xsysstarmaandag 1 augustus 2005 @ 15:27
quote:
Op maandag 1 augustus 2005 15:12 schreef Chandler het volgende:
Ik heb de volgende functie (sub)
[ code verwijderd ]

nu kan ik deze functie uitlezen door
[ code verwijderd ]

maar wat kan ik dan doen met test?
Hehe, niets . Het is een variant; varianten zijn eigenlijk rotzooi, 't kan alles zijn. Niet beledigend bedoeld, maar dit is zéér slecht geprogrammeerd: varianten moet men -eigenlijk altijd- zien te vermijden: ze zijn traag, slurpen geheugen en het programma kan er vrij weinig mee.

Ik weet niet zeker of Collections, 'strings' kunnen bevatten. Waarschijnlijk blijkbaar niet, anders zou deze programmeur geen variant hebben gebruikt.

Als ik u zou zijn, zou ik óf het FileSystemObject gebruiken, zoals in een eerdere reactie uitgelegd, óf een Klasse maken (bv. clsFile met i.i.g. de Publieke eigenschap Path). In plaats van "File as variant" te defineren, defineert u het nu "as clsFile". Vergeet niet:
1) Altijd File.Path te lezen en te vullen. Dus zoals in deze functie staat "File = bla..." moet worden "File.Path = bla...".
2) Het object in deze functie hergebruiken moet even wat anders: niet zomaar File = dir$, maar:
1
2
set File = new clsFile '(dit=deze regel moet ook even direct na de definitie van File geplaatst worden!)
File.path = dir$


Als terugwaarde van de Functie hebt u dan een Collectie, gevuld (of niet natuurlijk) met clsFile objecten, wiens bestandspad u kunt uitlezen met de Path-eigenschap van elk zo'n object.

Maar dit is maar één van de vele oplossingen .
EggsTCmaandag 1 augustus 2005 @ 15:36
Ook gelijk bedankt voor de layout fuck
Xsysstarmaandag 1 augustus 2005 @ 15:38
quote:
Op maandag 1 augustus 2005 15:36 schreef EggsTC het volgende:
Ook gelijk bedankt voor de layout fuck
Ja, dat is Foks probleem, hoor . Moeten ze maar een stijl kiezen die de volle ruimte van het venster benut.
Chandlermaandag 1 augustus 2005 @ 17:20
Het is dus om het even in het kort uit te leggen de bedoeling om een tree uit te lezen, ik dacht dat een functie daarvoor best handig zou zijn.

Ik ga zelf eens een functie proberen te maken...
Xsysstarmaandag 1 augustus 2005 @ 17:27
Een functie is prima handig .

U bedoelt een repeterende functie die mappen in een treeview plaatst en oneindig diep kan gaan?

Dan zult u een functie moeten schrijven die bestaat uit:
1) Een parameter byval "Path as string"
In de functie
2) De inhoud van de map "Path" doornemen met zo'n zelfde While-lus als in de vorige broncode en dan bij elke iteratie van een map dezelfde functie nóg eens aanroepen, maar dan met als Path, de map van de betreffende iteratie.

Als dit niet werkt, zou het wel moeten lukken door éérst een aparte collectie met die mappen te maken (dus in de lus, niet weer de functie aanroepen, maar toevoegen aan een collection) en nadat de lus klaar is, voor elk onderdeel uit de collectie nog eens de functie aanroepen.
Chandlermaandag 1 augustus 2005 @ 17:56
Ik heb nu het volgende geprobeerd; maar krijg steeds een error

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Sub process()

Dim xxx As String

 Set test = readTree(projForm.fromDir.path, _
             projForm.settingEXTvalue.Text, _
             xxx)
    
End Sub

Public Function readTree(ByVal path As String, ByVal extensions As String, ByVal fbase As String)

    FileName = Dir(path & extensions)
    Do While FileName <> ""
        filenames.Add path & FileName
        FileName = Dir
    Loop

End Function


waar ga ik de mist in? ik ben niet zo'n VBer heb ik al wel door
Xsysstarmaandag 1 augustus 2005 @ 18:43
- U moet kiezen wat je terug wil hebben van de functie Readtree; dit doet men door achter de haakjes van de functie 'as (type)' te plaatsen (zonder apostroffen).
- U moet Test "dimmen" (=defineren) as hetzelfde type als in de zin hierboven.
- U moet Filenames eerst dimmen als collectie en dan "Set Filesnames = new collection"; daarna pas de rest van de function ReadTree
- U moet ergens in de functie ReadTree bepalen wat u terug wilt hebben ("ReadTree = bla" óf "Set ReadTree = bla" als het om een object gaat).
- Wat wilt u met fBase doen?

't Is moeilijk zo even uit te leggen (ik moet zo ook nog eens weg), maar als ik u was, zou ik eens kijken op www.planet-source-code.com of een dergelijke stek; daar zijn veel programma's met broncode and tips te vinden.

VB is lastig in het begin; zeker de opgave die u uzelf oplegt, vergt wat meer ervaring en denkwerk dan waar de gemiddelde beginner mee begint .

Ik zou zeggen: probeer eens een tekstverwerker. In VB 6 zit een application wizard. Kies daaruit "MDI" en u krijgt een basis tekstverweker voorgeschoteld. Probeer die eens uit te breiden (behalve vet, cursief en onderstreept kan bijv. ook nog doorhaald=strikethrough, kleuren, objecten invoegen, sub-/superscript). Daar had ik veel van geleerd . Maar al met al doet u het prima .
EggsTCdinsdag 2 augustus 2005 @ 09:15
Ik ben meer van de winsock kant
JanMichieldinsdag 2 augustus 2005 @ 13:00
Ik heb er nog eentje. Ik gebruik een textbox als activity log. Voor het toevoegen van een nieuwe entry plak ik de content achter de bestaande content.

txtLog.text = txtLog.text & "Een nieuwe entry voor het log" & vbCrLf

Wanneer de tekstbox volzit zijn nieuwe items echter niet meer zichtbaar wanneer ze worden toegevoegd. Hoe zorg ik dat de laatste items zichtbaar blijven en de bovenste items wegvallen?

mmh, ik realiseer met net dat ik het ook andersom kan programmeren, nieuwe items bovenaan toevoegen. Maar het anderwoord op deze vraag zou wel handig zijn
Xsysstardinsdag 2 augustus 2005 @ 13:50
txtLog.selstart = len(txtlog.text)
O, vbNewline blijkt sneller te zijn dan vbCrLf; scheelt honderdsten van milliseconden, maar ach: ik zeg het toch maar even .

P.S. Ik zou een RTF box willen aanraden, want volgens mij heeft die geen grens van hoe lang de tekst mag zijn terwijl alle textboxen iets meer dan 35000 tekens mogen bevatten.
EggsTCdinsdag 2 augustus 2005 @ 13:56
chr$(10) & chr$(13) is nog sneller toch?
JanMichieldinsdag 2 augustus 2005 @ 14:16
Waar staat RTF voor?
Xsysstardinsdag 2 augustus 2005 @ 14:22
quote:
Op dinsdag 2 augustus 2005 13:56 schreef EggsTC het volgende:
chr$(10) & chr$(13) is nog sneller toch?
Ik geloof het niet want dan moet er op twee plekken in het geheugen gekeken worden (voor teken 10 en voor 13) terwijl vbNewline al gedefineerd is als 10 en 13 tezamen.

Ik heb ook maar ergens gelezen dat vbNewline het snelst is, samen met andere tips zoals altijd de $-varianten van commando's gebruiken wanneer mogelijk (mid$ i.p.v. mid, enz).

===
RTF staat voor Rich Text Format; een tekstopmaakformaat. MS heeft een control gemaakt dat dit formaat ondersteunt. Met RTF kan men tekst een kleurtje geven, vetdrukken, enz; net als Word en andere beter-dan-Kladblok-tekstverwerkers.
LeeHarveyOswalddinsdag 2 augustus 2005 @ 14:30
quote:
Op dinsdag 2 augustus 2005 13:50 schreef Xsysstar het volgende:
txtLog.selstart = len(txtlog.text)
O, vbNewline blijkt sneller te zijn dan vbCrLf; scheelt honderdsten van milliseconden, maar ach: ik zeg het toch maar even .

P.S. Ik zou een RTF box willen aanraden, want volgens mij heeft die geen grens van hoe lang de tekst mag zijn terwijl alle textboxen iets meer dan 35000 tekens mogen bevatten.
+ dat het opslaan vanuit rtf kinderlijk eenvoudig is: rtftxt.savefile "C:\mijnbestand.doc"
whosvegasdinsdag 2 augustus 2005 @ 23:00
quote:
Het is een variant; varianten zijn eigenlijk rotzooi, 't kan alles zijn. Niet beledigend bedoeld, maar dit is zéér slecht geprogrammeerd: varianten moet men -eigenlijk altijd- zien te vermijden: ze zijn traag, slurpen geheugen en het programma kan er vrij weinig mee.
In sommige situaties zijn variants wel zinvol. Je kan er nl flexibele code mee schrijven, voorbeeldje:
1
2
3
4
5
6
7
8
9
function Convert(var as variant) as integer
     Select case vartype(var)
          case vbInteger
                'conversie code voor integers
          case vbString
              'conversie code voor strings
          case vbDouble
                'conversie code voor doubles
end function

Dus je kan een functie schrijven om verschillende typen variabelen af te handelen.
quote:
Ik weet niet zeker of Collections, 'strings' kunnen bevatten.
Strings kun je wel opslaan in een collection, geloof ik. Ik maak meestal gebruik van array's ipv collections
EggsTCwoensdag 3 augustus 2005 @ 10:02
Ik probeer een telnet applicatie na te bootsen met VB6.

Nu heb ik dus een simpel dingetje gemaakt met winsock en een output window. Winsock connect op de speedtouch 510 router naar port 23.. krijg wat onzin terug, en daarna mooi een wachtwoordje in mn outputwindow. Commando's zenden naar de router werkt ook ok, gewoon met senddata text1.text.

Dit is getest op een speedtouch 510 en een Siemens5830 router. Op beide routers krijg ik wat onzin (blokjes, vage tekens) terug maar ook normale tekst zoals "Username : ". Dit werkt dus voor de rest OK.

Probleem is wanneer ik een VoDSL router benader(de RAD's LA-110) dan krijg ik alleen maar onzin terug, zonder normale tekst. Eigelijk alleen blokjes en sterretjes en ascii figuurtjes. Kan het zijn dat het een encryptie is die op die router zit? Want als ik 'gewoon' telnet ernaartoe dan krijg ik wel een PASSWORD prompt... iemand enig idee?
EggsTCwoensdag 3 augustus 2005 @ 13:53
niemand?

Edit :

Alle termtypes werken wel op telnet, dus daar zou t ook neit aan liggen,.. zoals VT100, VT52 etc.

[ Bericht 43% gewijzigd door EggsTC op 03-08-2005 14:08:20 ]
whosvegaswoensdag 3 augustus 2005 @ 20:00
quote:
Op woensdag 3 augustus 2005 13:53 schreef EggsTC het volgende:
niemand?

Edit :

Alle termtypes werken wel op telnet, dus daar zou t ook neit aan liggen,.. zoals VT100, VT52 etc.
Ik denk dat je je vraag beter kan stellen op:
gathering.tweakers.net

Want je stelt wel een hele specifieke vraag, imand moet net toevallig met hetzelfde bezig zijn.
EggsTCwoensdag 3 augustus 2005 @ 22:16
Ben er al achter, als je een char 1 terug krijgt met een winsock.. sla m over bij het invoegen van je textbox.. keyascii 1 zorgde ervoor dat ik de helft van mn werkelijke indata maar terug kreeg in mn textbox. dont ask.

Geen idee waarom.. maar heb het step by step zitten bekijken en die indata zitten parsen totdat ik erachter kwam
Xsysstardonderdag 4 augustus 2005 @ 11:29
quote:
Op woensdag 3 augustus 2005 22:16 schreef EggsTC het volgende:
Geen idee waarom.. maar heb het step by step zitten bekijken en die indata zitten parsen totdat ik erachter kwam
ASCII tekens 1 - 20 (geloof ik) zijn besturingstekens en kunnen dus worden verwerkt als iets anders dan gewoon een letter. Bijvoorbeeld nummer 10 en 13 (Enter).

P.S. Ik was er gisteren niet, spijt me dat ik toen niet kon antwoorden .
JanMichieldonderdag 4 augustus 2005 @ 13:01
Nog iets waar ik niet uitkom, deze is een beetje moeilijker .

De input is data in een RichTextBox. De data heeft het volgende formaat:

Mon Nov 8 05:01:18 2004, 30747408, 30742991, ABC, DEF, 10000, 1.29435, 0.0000 , 0.00
Mon Nov 8 05:01:41 2004, 30747434, , GHI, JKL, 10000, 1.29520, 1000.1393 , 0.00
Mon Nov 8 05:01:50 2004, 30747450, 30742991, MNO, PQR, 10000, 1.29520, 1000.1393 , 501.35
Mon Nov 8 05:02:24 2004, 30747741, , STU, VWX, 500, 1.29520, 0.0000 , 501.35
etc, etc.

Items zijn gescheiden door een comma. Waarschijnlijk moet de input lijn voor lijn worden uitgelezen en items achter een comma in een nieuw veld worden geplaatst. De tabel met juiste velden is reeds gecreeerd, maar hoe krijg ik de verschillende items in de aparte cellen?


Private Sub UpdateData()
Dim dbAccountData As Database
Dim rsAccountUpdate As Recordset
Set dbAccountData = OpenDatabase("AccountData.mdb")
Set rsAccountUpdate = dbAccountData.OpenRecordset("AccountX")


...
...


End Sub
Xsysstardonderdag 4 augustus 2005 @ 13:09
Volgens mij kon dat dmv:
rsAccountUpdate!Veldnaam = Veldwaarde
(Dus i.p.v. een punt, een uitroepteken).

Verder zou ik willen aanraden het databaseobject algemeen te defineren (modulair; buiten deze specifieke sub), want dat maakt het programma sneller omdat de database maar eenmalig geladen hoeft te worden.

P.S. Ik weet niet superveel van databases .
JanMichieldonderdag 4 augustus 2005 @ 13:24
Ik heb de database in een module gedefineerd, dit was enkel voor de duidelijkheid van het voorbeeld . Ik snap echter niet helemaal hoe ik de Veldwaarde uit de string moet trekken, gewoon de comma opzoeken met InStr() en dit elk veld in aparte variabelen plaatsen? Of kan dat beter op een andere manier?

En hoe kan ik de input lijn voor lijn behandelen? Is er een bepaalde manier om via een Loop elke keer met de volgende regel van de input te werken?
Xsysstardonderdag 4 augustus 2005 @ 14:04
-Dubbel0
Xsysstardonderdag 4 augustus 2005 @ 14:05
Lijn voor lijn inlezen:
dim lFile as long: lfile = freefile
dim sInput as string, sArr as string
Open Bestand for input as lfile
while not eof(lfile) 'Zolang niet einde van bestand
line input lfile, sinput
sarr = split(sinput,",")
wend
close lfile

[ Bericht 0% gewijzigd door Xsysstar op 04-08-2005 14:09:59 (Klein Foutje :)) ]
JanMichieldonderdag 4 augustus 2005 @ 14:07
ok, ik zal het proberen Thanks.
whosvegasdonderdag 4 augustus 2005 @ 17:14
quote:
Op donderdag 4 augustus 2005 13:01 schreef JanMichiel het volgende:
Nog iets waar ik niet uitkom, deze is een beetje moeilijker .

De input is data in een RichTextBox. De data heeft het volgende formaat:

Mon Nov 8 05:01:18 2004, 30747408, 30742991, ABC, DEF, 10000, 1.29435, 0.0000 , 0.00
Mon Nov 8 05:01:41 2004, 30747434, , GHI, JKL, 10000, 1.29520, 1000.1393 , 0.00
Mon Nov 8 05:01:50 2004, 30747450, 30742991, MNO, PQR, 10000, 1.29520, 1000.1393 , 501.35
Mon Nov 8 05:02:24 2004, 30747741, , STU, VWX, 500, 1.29520, 0.0000 , 501.35
etc, etc.

Items zijn gescheiden door een comma. Waarschijnlijk moet de input lijn voor lijn worden uitgelezen en items achter een comma in een nieuw veld worden geplaatst. De tabel met juiste velden is reeds gecreeerd, maar hoe krijg ik de verschillende items in de aparte cellen?


Private Sub UpdateData()
Dim dbAccountData As Database
Dim rsAccountUpdate As Recordset
Set dbAccountData = OpenDatabase("AccountData.mdb")
Set rsAccountUpdate = dbAccountData.OpenRecordset("AccountX")


...
...


End Sub
Je kunt de Split() functie gebruiken om de verschillende velden in een array op te slaan. Daarna kun je de velden gemakkelik opslaan in de database.
JanMichielvrijdag 5 augustus 2005 @ 14:28
Bedankt, het werkt perfect. Nu alleen nog wat checks toevoegen tegen corrupte data. Wat voor Type zou jij eigenlijk toewijzen aan de database velden (help geeft aan dat een Type toewijzen optional is, maar wanneer het programma draait geeft windows een foutmelding wanneer geen Type is toegewezen)?

Aangezien je sArr als sting defineerde neem ik aan dat je alles dbText (of een ander tekst type) zou maken. Is het echter niet beter om een nummer bijvoorbeeld dbLong als Type toe te wijzen, of geeft een dbText nummer geen probleem met latere verwerking?

Kan een variabele ook naar #1 worden geopend - met een andere functie misschien? Ik kreeg het enkel voor elkaar met een file on disk.
Xsysstarvrijdag 5 augustus 2005 @ 19:27
Types databasevelden? Nou, in de database moet men per veld gewoon opgeven wat voor info daarin komt: string (tekenreeks), integer (getal), long (lang getal), enz. Anders zou ik niet weten wat je bedoelt.

sArr is een string array, omdat deze alle tekens kan bevatten (want een getal kan natuurlijk geen letters bevatten). De inhoud van deze array moet verwerkt worden:
strNaam = sArr(0)
intHuisnummer = cint(val(sArr(1))) 'CInt kan in dit geval overbodig zijn, maar dat weet ik even niet zeker

Dus afhankelijk van wát dat ene Array Item voor gegevens bevat moet deze mogelijk omgezet worden van String (namelijk de Array) naar bijv. een Integer (namelijk de variabele waar de info moet komen). Dit kan met de CCommando's (CInt, CLng, CDbl, CDate).

De CCommando's geven een fout als "de brongegevens" corrupt zijn (= meestal: bevatten letters); daarom moet men altijd (= wanneer mogelijk) het CCommando loslaten op Val(Brongegevens) i.p.v. gewoon "Brongegevens". Het Val-commando geeft namelijk indien mogelijk een Double terug ("143 e" > 143; als het goed is) en anders 0 (i.p.v. een foutmelding).

Je kunt dus het beste de databaseveldtypes opgeven zoals ze moeten zijn: integer voor huisnummers, string voor straat, enz. Bij het inlezen moet dan alleen het een en ander worden omgezet.
==
Stom van me: 'k las het niet goed. Dat "Open" commando is voor bestanden. Als je een gewone String lijn-voor-lijn wilt verwerken, gescheiden door vbNewline (=enters), dan kan dat als volgt:

1
2
3
4
5
6
dim sRows() as string, sArr() as string, l as long
sRows = split(rtfJeTextBox,vbnewline)
for l = 0 to ubound(sRows)
    sArr =  split(sRows(l),", ")
     'Wat je verder per regel wilt doen = verwerken sArr...
next l
EggsTCzaterdag 6 augustus 2005 @ 00:00
xsysstar, heb nog een leuke vraag aan je, kan je een MSN adden? tis nl niet 1 vraag. Tis een vrij complexe situatie Zie profiel.
Chandlermaandag 8 augustus 2005 @ 10:31
Vraagje; is er ook een groot IRC kanaal voor VB programmeurs? zou leuk zijn
Xsysstarmaandag 8 augustus 2005 @ 19:04
Zou er vast wel zijn, maar ik hou niet zo van IRC .
EggsTCdinsdag 9 augustus 2005 @ 09:19
quote:
Op maandag 8 augustus 2005 10:31 schreef Chandler het volgende:
Vraagje; is er ook een groot IRC kanaal voor VB programmeurs? zou leuk zijn


Beter maken we er zo 1 zelf, voor FOK!-VBers ofzo
Chandlerdinsdag 9 augustus 2005 @ 23:24
Ik houd ook niet zo van IRC maar vragen beantwoorden gaat meestal sneller..

Ps iemand een idee voor het volgende!:

Wanneer mijn progie meerdere bestanden upload (of 1 grote) en ik klik ff op een ander progie en keer dan terug, dan wordt pas mijn window ververst na dat de actie geklaard is... hoe kan ik zorgen dat ook onder een actie mijn x etc buttons klikbaar blijven?

Snappie?
Xsysstarzaterdag 13 augustus 2005 @ 22:50
DoEvents in de lus plaatsen .
Burbozondag 14 augustus 2005 @ 15:24
Ik ben zelf een programmatje aan het schrijven in VB6, maar nu zoek ik een manier om mijn CPU-temperatuur en Case-temperatuur uit te lezen. Ik heb wel wat gelezen over performance counters, maar daar kan ik me verder weinig wijs uit maken. Hetzelfde geldt voor het uitlezen van het geluid, ik wil kunnen zien hoe sterk het geluid is wat naar mn boxen gaat, omdat ik een VU-meter wil gaan maken. Weet iemand hoe ik dit het beste aan kan pakken?
Xsysstarzondag 14 augustus 2005 @ 15:28
Niet in VB ben ik bang; tenminste: ik weet niet hoe VB zo diep in het systeem kan graven. Er zijn wel Windows-APIs om rechtstreeks het geheugen uit te lezen en te schrijven door een geheugenadres op te geven, maar daar wil je niet aan beginnen . En ik betwijfel of die temperatuur in het geheugen staat. Helaas, ik kan niet helpen.

Ik denk eigenlijk zelfs dat je idee niet zomaar lukt, want waarschijnlijk zal elk moederbord zijn eigen manier van opslaan van die informatie hebben (immers: elke moederbordfabrikant heeft (meestal) zijn eigen hulpprogrammaatjes, zoals Asus Probe om de temperatuur mee bij te houden).
whosvegaszondag 14 augustus 2005 @ 15:42
quote:
Op zondag 14 augustus 2005 15:24 schreef Burbo het volgende:
Ik ben zelf een programmatje aan het schrijven in VB6, maar nu zoek ik een manier om mijn CPU-temperatuur en Case-temperatuur uit te lezen. Ik heb wel wat gelezen over performance counters, maar daar kan ik me verder weinig wijs uit maken. Hetzelfde geldt voor het uitlezen van het geluid, ik wil kunnen zien hoe sterk het geluid is wat naar mn boxen gaat, omdat ik een VU-meter wil gaan maken. Weet iemand hoe ik dit het beste aan kan pakken?
Het enige wat je kan doen is op zoek gaan naar windows API's
Of vraag het eens in het Dev forum op tweakers.net
Burbozondag 14 augustus 2005 @ 16:44
quote:
Op zondag 14 augustus 2005 15:42 schreef whosvegas het volgende:

[..]

Het enige wat je kan doen is op zoek gaan naar windows API's
Of vraag het eens in het Dev forum op tweakers.net
API's daar heb ik geen ervaring mee, dus ik weet niet of dat gaat lukken. Weet je wel een oplossing voor het geluid?
whosvegaszondag 14 augustus 2005 @ 19:08
quote:
Op zondag 14 augustus 2005 16:44 schreef Burbo het volgende:

[..]

API's daar heb ik geen ervaring mee, dus ik weet niet of dat gaat lukken. Weet je wel een oplossing voor het geluid?
Met geluid heb ik geen ervaring
Misschien is het zinvol om je eerst in Windows API programmeren te verdiepen. Met API calls kun je vanuit VB programma's veel meer doen dan dat je alleen de VB library's gebruikt. En zo moeilijk is het allemaal ook weer niet. Afhankelijk van je ervaring denk ik dat je met een paar avondjes studeren een heel eind komt.
whosvegaszondag 14 augustus 2005 @ 19:17
Misschien heb je hier iets aan:
http://www.planet-source-(...)?lngWId=1#categories

Er is ook een sectie Sound/MP3
Burbozondag 14 augustus 2005 @ 19:18
quote:
Op zondag 14 augustus 2005 19:08 schreef whosvegas het volgende:

[..]

Met geluid heb ik geen ervaring
Misschien is het zinvol om je eerst in Windows API programmeren te verdiepen. Met API calls kun je vanuit VB programma's veel meer doen dan dat je alleen de VB library's gebruikt. En zo moeilijk is het allemaal ook weer niet. Afhankelijk van je ervaring denk ik dat je met een paar avondjes studeren een heel eind komt.
Misschien wel de moeite waard idd, maar ik denk dat er toch wel een makkelijkere manier moet zijn om ergens het geluidniveau vandaan te halen
Burbozondag 14 augustus 2005 @ 20:15
quote:
Op zondag 14 augustus 2005 19:17 schreef whosvegas het volgende:
Misschien heb je hier iets aan:
http://www.planet-source-(...)?lngWId=1#categories

Er is ook een sectie Sound/MP3
Ziet er goed uit, maar bij bijna alle programma's krijg ik "couldn't get wavein\waveout", dat blijkt dus een soort van geluidskaartprobleem te zijn, ik denk dat ik dus nog op zoek moet gaan naar wat anders
whosvegaszondag 14 augustus 2005 @ 22:44
quote:
Op zondag 14 augustus 2005 19:18 schreef Burbo het volgende:

[..]

Misschien wel de moeite waard idd, maar ik denk dat er toch wel een makkelijkere manier moet zijn om ergens het geluidniveau vandaan te halen
Ik bedoel het meer algemeen. Als je verder wilt met programmeren zou ik me er zeker in gaan verdiepen. Hierdoor krijg je een beter inzicht in hoe een win32 programma werkt.
Burbozondag 14 augustus 2005 @ 22:51
quote:
Op zondag 14 augustus 2005 22:44 schreef whosvegas het volgende:

[..]

Ik bedoel het meer algemeen. Als je verder wilt met programmeren zou ik me er zeker in gaan verdiepen. Hierdoor krijg je een beter inzicht in hoe een win32 programma werkt.
Dank je voor de top, waarschijnlijk zal ik dat wel enigszins doen dan binnenkort