Autor |
Beitrag |
en!gma
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Di 04.01.05 16:03
also hi...
hab kleines prob und hoffe ihr könnt mir wieder mal helfen...
also ich hab in einer ini datei mehrere.... "packete" welche jeweils aus 1
namen und mehreren zahlen besteht ( zB 1 7 5 oder 2 4 oder 2 4 1 7)
dann hab ich 10 checkboxen...für jede zahl eine (0-9)...
also und jex möchte ich am anfang das man die zahlen anwählt an den checkboxen die man möchte...
und das programm sucht mir die namen der "packete" heraus...
naja villeicht ein bissl unverständlich...
ich versuchs mal anhand eines beispiels zu erklären...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| [packet1] name=packet1 zahl=1 7 5 [packet2] name=packet2 zahl=2 4 [packet3] name=packet3 zahl=2 4 1 7 |
so sieht erstmal meine ini beispielsweise aus...
nun wenn ich häckchen setze bei 2 und 4...
sollte er mir nur packet2 in eine memo schreiben...
wenn ich allerdings 1,2,4 und 7 anwähle...
sollte er mir packet2 und packet3 in die memo schreiben...
und bei 1,2,4,5 und 7 halte alle 3 packete...
thx schonma ;D
mfg
en!gma
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 04.01.05 16:47
Moin!
Ich hab ehrlich gesagt keine Lust, mich mit der Logik deiner Abfrage zu beschäftigen, dauert mir zu lange. Könntest du bitte mal etwas "geordneter" erklären, wie der Zusammenhang von "angekreuzten Kästchen" und "Paketen" ist?
Ich denke, das würde es deutlich erleichtern, dir einen Tipp zu geben.
Hast du schon Quelltext zu deinem Problem? Wäre natürlich nicht schlecht, den mal zu sehen, nicht wahr?
cu
Narses
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Di 04.01.05 16:56
also...tut mir leid das ich es etwas komisch beschrieben habe...
einen quellcode gibt es leider noch nicht, da das eigentlich die hauptprozedur von dem programm
sein soll.
aber ich hab einfach mal ein bild gemacht wie es später ca aussehen sollte...
(hmm weiss nich warum er es nich anzeigt -> www.phoenix-designz.de/bla23.JPG )
also ich wähle oben die zahlen aus...und wenn ich auf search drücke...
sucht er mir alle pakete aus meiner ini datei, welche die zahlen enthalten und
schreibt ihren namen in die ini datei...
auf dem bild hab ich einfach mal das 2. beispiel genommen...
ich hoffe es ist jex ein bischen verständlicher
mfg
en!gma
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 04.01.05 17:02
Moin!
Sorry, auch der 2. Versuch kam bei mir nicht an (nettes Bild, aber auch nicht mehr Informationsgehalt, als das Textbeispiel).
Formuliere doch bitte mal aus, WANN GENAU ein Paket die "ausgewählt"-Bedingung erfüllt. Offensichtlich spielen da doch Untermengen eine Rolle...
cu
Narses
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Di 04.01.05 17:05
der name des packets wird angezeigt...wenn alle zahlen, welche in der ini datei gespeichert sind...
auch oben angekreuzt sind...wenn du das verstanden hast...kann ich versuchen dir zu erklären wann es noch angezeigt werden soll...sonst verwirrt es dich glaub ich nur noch mehr ;D
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 04.01.05 17:09
Eventuell meinst du etwas wie ReadSection und ReadSectionValues.
Dafür musst du aber wissen, wie alle Pakete heißen. Schau es dir in der Delphi-Hilfe einmal an.
Dann musst du noch die eingelesenen Strings nach deinen Zahlen durchsuchen. Das dürfte aber wohl das kleinere Problem sein (String-Funktion Pos).
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 04.01.05 17:19
OK, das war klarer.
Vorschlag: Da nur Ziffern in den Listen der INI-Keys stehen, kannst du diese doch als Bitnummern in einem Wort auffassen und setzen, wenn die Ziffer in der Liste vorkommt. So hast du eine binäre Darstellung deiner Ziffernliste erreicht. Dann wandelst du die CheckBoxen-Stati in ebenso eine binäre Darstellung um und vergleichst so:
Delphi-Quelltext 1: 2:
| if (((NOT ziffernliste_cb_bin) and ziffernliste_ini_bin) = 0) then ShowMessage('Alle INI-Ziffern sind angekreuzt!'); |
Sowas in der Art? Kann man auch mit Mengen machen, ist Geschmacksache.
cu
Narses
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 08.01.05 12:03
danke erstmal für die antworten aber ich habs jex ein bissl anders gemacht...weil auch wörter usw
vorkommen sollten und nun funktioniert es erstmal...
falls es wen interessiert...ich habs mit
TCheckBox(FindComponent gemacht...
aber nun is mein problem...ich nehm einfach nochmal die beispiel ini von oben:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| [1] name=paket1 zahl=1 7 5 [2] name=paket2 zahl=2 4 [3] name=paket3 zahl=2 4 1 7 |
ich habe nun eine listbox...in die sind die verschiedenen namen eingetragen...
packet1,2 & 3...wenn ich nun eine auswähle, soll er mir in ein label die zahlen schreiben...
das problem hierbei ist, dass ich ja nicht weiss ob nun [1] [2] oder [3] angeklickt habe...
kann ich also in der ini einfach nach dem namen suchen?
oder geht das nicht so einfach?
mfg
en!gma
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 08.01.05 12:24
en!gma hat folgendes geschrieben: | das problem hierbei ist, dass ich ja nicht weiss ob nun [1] [2] oder [3] angeklickt habe...
kann ich also in der ini einfach nach dem namen suchen?
oder geht das nicht so einfach? |
Du hast doch die Sections 1, 2 und 3, die kannst du auslesen. Entweder die komplette Section auf einmal mit ReadSection, oder nur einen Wert mit ReadString (z.B. ReadString('1', 'name', '') um den Wert "name" aus der Section mit dem Namen "1" auszulesen.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 08.01.05 18:39
nein ich denke das ist ein wenig schwerer, wenn man den anfang nich richtig verstanden hat...
also ich habe ja erst mit meinem "suchalgorithmus" (falls man das so nennen kann)
verschiedene namen aus verschiedenen sections ausgelesen...
dann habe ich zB in der ListBox1 5 verschiedene namen stehen zB aus den sections [2] [5] [6]...
aber wenn ich nun eine davon anklicke...kann ich doch nicht genau sagen es soll [2] oder so sein...
weil ja bei jeder suche neue namen darinstehen...
und nun hatte ich vor...falls es geht...die ini datei nach einem bestimmten "namen" durchsuchen zu lassen...
und wenn man diesen namen gefunden hat....soll zB der wert "zahlen" aus der gleichen section ausgegeben werden.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 08.01.05 22:07
Moin!
Sorry, ich will dir nicht auf den Schlipps treten, aber dein Talent für "Beschreibungen" ist nicht gerade ruhmreich...
Ich hab ja schon weiter oben nicht wirklich den Eindruck, verstanden zu haben, was du da eigentlich tust, aber mittlerweile glaube ich, wird´s noch etwas komplizierter.
Unter Umständen hilft es ja was, wenn du mal ein bischen den geheimnisvollen Vorhang lüftest, und uns erzählst, was du da eigentlich tun willst, hm?
Ansonsten würde ich dazu raten, die INI-Datei in eine passende Datenstruktur zu lesen, um besser Abfragen durchführen zu können. Ist auch performanter, als die ewigen INI-Zugriffe.
cu
Narses
PS: Ich würd´ ja wirklich gerne helfen, aber ich blick echt nich, was du da tust  Wenn ich mir die "rege Teilnahme" an diesem Thread ansehe, glaube ich, geht´s den anderen ähnlich...
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 08.01.05 22:25
mhmm... ich glaub ich habs geblickt. du hast ne liste, die einem namen eine zahlenreihe zuordnet, also zumbeispiel dem namen Packet1 die zahlenreihe 157 (hab die zahlen in die richtige reihenfolge gebracht  ) dann würde ich allerdungs genau andersrum vorgehen: ich würde die zahlenreihe als name und den namen als wert benutzen:
Quelltext 1: 2: 3:
| [packete] 157=packet1 24=packet2 |
das machts doch einfacher! dann musst du nur noch die captions oder Tags der angekreuzten Checkboxes als string hintereinander legen und ReadString('24') machen, dann das ganze mit allen kombinationen durchprobieren. also erstmal die kombos mit 2 zeichen nehmen und von vorne anfangen (angenommen 12457 sind angekreuzt):
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| 12 14 15 17 24 25 27 45 47 57 --- 124 125 127 145 147 ....... |
das ganze natürlich per schleife. sorry, aber ich kann mir nicht vorstellen wie das anders gehen soll, es sei denn du lädts dir erstmal alle gespeicherten teile in einen Array und gehst den dann durch... mal kurz checken...jap. ReadSection liefert dir alle Namen, nicht die Werte. die haust du in ein Memo.Lines und suchts übereinstimmungen mit den checkboxes  das sollte reichen.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 08.01.05 22:41
Auch ne Methode, einfach die Problemstellung der Lösung anpassen...
Wer sagt denn, dass er die INI-Datei nicht einfach so beibehalten muss, weil sie z.B. gar nicht von ihm ist?
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 08.01.05 22:55
doch doch...sie ist wohl von mir...
naja aba um das ganze jex mal eindeutig zu machen was ich meine... ;D
ich hab mich rangesetzt und wollte einen diablo2 runencatcher programmieren...
villeicht kennt der eine oder andere das spiel ja schon...
naja auf jedenfall...kann man runen sammeln...es gibt 33 runen...
und aus diesen kann man "runenwörter" machen...
also ein paar runen hintereinanderklatschen und es kommt ein wort raus, welches vorher bestimmt ist...
also kreuzt man in dem tool alle runen an die man hat...
und das programm zeigt dir alle runenwörter an die du machen kannst...
so weit hab ich es bereits...
aber ich habe in der ini 15 stats gespeichert...
und wenn ich nu in der listbox was anklick soll er mir die stats in ein fenster daneben schreiben...
das is der code den ich bisher habe...
der schreibt die möglichen runenwörter schonmal in eine listbox...
nur weiss ihc nich wie ich es machen soll damit die stats ausgelesen werden...
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:
| procedure TForm1.Button1Click(Sender: TObject); var RuneIni : TIniFile; Chk1:TCheckbox;Chk2:TCheckbox;Chk3:TCheckbox;Chk4:TCheckbox;Chk5:TCheckbox;Chk6:TCheckbox; i : integer; count : integer; name : string; rune1 : string;rune2 : string;rune3 : string;rune4 : string;rune5 : string;rune6 : string;
begin ListBox1.Items.Clear; RuneIni:=TIniFile.create(ExtractFilePath(ParamStr(0))+'runewords.ini'); count:=RuneIni.ReadInteger('config','count',0); for i:=1 to count do begin rune1:=RuneIni.ReadString(intToStr(i),'rune1',''); rune2:=RuneIni.ReadString(intToStr(i),'rune2',''); rune3:=RuneIni.ReadString(intToStr(i),'rune3',''); if rune3='' then rune3:=rune2; rune4:=RuneIni.ReadString(intToStr(i),'rune4',''); if rune4='' then rune4:=rune2; rune5:=RuneIni.ReadString(intToStr(i),'rune5',''); if rune5='' then rune5:=rune2; rune6:=RuneIni.ReadString(intToStr(i),'rune6',''); if rune6='' then rune6:=rune2; name:=RuneIni.ReadString(intToStr(i),'name','');
Chk1:=TCheckbox(FindComponent('rune'+rune1)); Chk2:=TCheckbox(FindComponent('rune'+rune2)); Chk3:=TCheckbox(FindComponent('rune'+rune3)); Chk4:=TCheckbox(FindComponent('rune'+rune4)); Chk5:=TCheckbox(FindComponent('rune'+rune5)); Chk6:=TCheckbox(FindComponent('rune'+rune6)); if Chk1.Checked and Chk2.Checked and Chk3.Checked and Chk4.Checked and Chk5.Checked and Chk6.Checked then ListBox1.AddItem(Name,Listbox1); end; RuneIni.Free; end; |
und das hier ist die ini datei die ich zum testen genommen hab...
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:
| [config] count=2
[1] name=Kein Plan type=weapons only info=only hc ladder rune1=Tir rune2=El rune3=Sol rune4=Ber rune5=Tal rune6=Ort stat01=bla stat 01 stat02=bla stat 02 stat03=bla stat 03 stat04=bla stat 04
[2] name=Enigma type=armors only info=only hc ladder rune1=Jah rune2=Ith rune3=Ber rune4= rune5= rune6= stat01=bla stat 01424 stat02=bla stat 02442144 stat03=bla stat 0344124 stat04=bla stat 044214421 |
ich hoffe das es jetzt mal richtig verständlich is...
und es tut mir leid das ich zuerst für so eine allgemeine verwirrung gesorgt hab 
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 08.01.05 23:29
Moin!
Ahhhhh, die Sonne geht auf... warum hast du das nicht gleich gesagt...  Jetzt ist auch alles klar!
Nun, ich persönlich würde es zwar anders lösen, aber es ist ja auch dein Programm.
Vorschlag:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if Chk1.Checked and Chk2.Checked and Chk3.Checked and Chk4.Checked and Chk5.Checked and Chk6.Checked then ListBox1.AddItem(Name,TObject(i)); |
Du hast da die Listbox selbst nochmal übergeben, warum weiss ist nicht, vermutlich du auch nicht, oder?  Wenn du da aber den Index des Runenwortes aus der INI einträgst, kannst du in der Ereignisbehandlung für den Listbox-Klick wieder den Index des Runenwortes ermitteln und damit auch wieder die korrekte Section in der INI auffinden:
Delphi-Quelltext 1:
| i := Integer(LixtBox1.Items.Objects[ListBox1.ItemIndex]); |
Damit hast du in "i" wieder die Section und kannst passend lesen.
Alles klar?
cu
Narses
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 08.01.05 23:33
ahhh jex is auch mir die sonne aufgegangen...
naja bin halt selber noch vollnewbie mit delphi ;D
und du hattest recht...ich wusste selbst nich so genau wieso ich die box selbst nocheinmal übergeben hab...
ich denke das wars dann...
thx nochma =)
|
|