Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Nur angekreuzte Items in aus Checklistbox speichern?
Tony-S - Di 13.07.10 22:19
Titel: Nur angekreuzte Items in aus Checklistbox speichern?
Hallo Forum ich hänge gerade daran, nur angehakte Items in einer Checklistbox,
bzw. Bitmaps zu speichern, folgendes habe ich versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| for I := 1 to frmIMG.CheckListBox1.Items.Count -1 do begin if frmIMG.Checklistbox1.Checked[i] then begin if cbDateiTyp.ItemIndex = 0 then begin SaveBMPToFile(frmCounter.Frames[I], frmDiashowEinstellungen.tfFilename.Text + ' ' + IntToStr(I)+'.bmp'); end; end; end; |
Danke schonmal an alle die mich auf den richtigen Weg bringen können :D
jaenicke - Di 13.07.10 22:22
Mir fällt als erstes auf, dass du den ersten Eintrag auslässt. Ist das gewollt? :gruebel:
Ansonsten: Was passiert, was passiert nicht, was sollte passieren, ...? Hast du mal mit dem Debugger schrittweise geschaut was passiert?
Tony-S - Di 13.07.10 23:06
Ich glaube ausgelassen habe ich keins, mein Programm "macht" ja z. B. 15 Bilder,
wenn noch alle angehakt sind, dann speichert es auch 15 Stück.
Es soll nun aber nur die angehakten speichern.
Ist eines nicht angehakt bekomm ich eine OutofBounds Fehlermeldung.
ASMFreak - Di 13.07.10 23:31
Tony-S,
Sebastian meint, Du lässt die for-Schleife nicht bei "0" beginnen und unterschlägst damit das erste Element der Listbox!
Aber abgesehen davon, kann ich Deinen Fehler nicht nachvollziehen, denn der Code, den Du gezeigt hast, ruft im Falle eines nicht gecheckten Eintrags nichts auf! Du sagst aber, dass der Fehler nur bei nicht gecheckten Items auftritt, bei den gecheckten, bei denen Code ausgeführt wird, nicht. Es ist schon ziemlich übersinnlich, wenn etwas, das nicht ausgeführt wird, weil es nicht da ist, eine Fehlermeldung produziert ...
Also entweder ist das, was Du uns gezeigt hast, nur ein Codefragment, oder die Fehlermeldung erfolgt außerhalb dieser Schleife!
Gruß,
Trutz
jaenicke - Di 13.07.10 23:34
Tony-S hat folgendes geschrieben : |
| Ist eines nicht angehakt bekomm ich eine OutofBounds Fehlermeldung. |
Wahrscheinlich aber in Zeile 8 im geposteten Quelltext, oder?
Deshalb der Hinweis auf den Debugger, dann siehst du doch in wenigen Augenblicken was da passiert.
ASMFreak - Di 13.07.10 23:44
Sebastian,
wie kommt er bei ungechektem Item[I] in Zeile 8?
Gruß, Trutz
Tony-S - Di 13.07.10 23:45
Ok wenn ich jetzt jedes Item in der Listbox auswähle also so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for I := 0 to frmIMG.CheckListBox1.Items.Count -1 do begin if frmIMG.Checklistbox1.Checked[i] then begin if cbDateiTyp.ItemIndex = 0 then begin SaveBMPToFile(frmCounter.frames[i], frmDiashoweinstellungen.tfFilename.Text + ' ' + inttostr(i)+'.bmp');
end; |
bekomm ich in der
Unit PictureConvert [
http://www.delphi-forum.de/viewtopic.php?t=71359] einen Fehler in der markierten Zeile:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure SaveBMPToFile(Picture: TBitmap; FileName: String); begin try Picture.SaveToFile(FileName); finally end; end; |
diesen Fehler:
wenn ich aber bei 1 bis .count beginne kann ich zumindestens auch alle bitmaps speichern.
Ich will ja nur abfragen welche angehakt sind, und diese dann speichern ôO.
Edit
____
Wenn ich das so mache, hab ich ja wie gesagt alle x Bilder im Array + dann ich speichere auch im Ordner:
Moderiert von
Narses: Bild als Anhang hochgeladen.
Moderiert von
Narses: URL-Tags ergänzt.
ASMFreak - Di 13.07.10 23:59
Das sieht ganz danach aus, dass Du Probleme mit den Zuordnungen der Indices in den verschiedenen Komponenten hast. Denn Du hast offensichtlich einen ListenEintrag 0, zu dem es kein Bitmap im frmCounter.Frames gibt (dort steht offensichtlich nil, daher die Fehlermeldung mit Speicherzugriff auf Adresse $00000000. Das Problem dadurch zu lösen, dass Du die Schleife bei 1 beginnen lässt, hilft Dir nicht.
Und nochmals: Es kann nicht daran liegen dass ein Listeneintrag gecheckt oder ungechekct ist. Denn der Fehler findet offensichtlich in Zeile 8 statt, wie Sebastian vermutet. Dahin kommst Du aber nicht, wenn ein Listeneintrag nicht gecheckt ist!
Prüf mal die Zuordnungen der verschiedenen Komponenten, also ob bei der Liste[I] auch das passende Frames[I] ist. Wenn nämlich nicht, dann könnte der Fehler tatsächlich in Zeile 8 auftreten, wenn z.B. ListBox.Items.Count > Frames.Count! Hat dann aber nichts mit dem Checken zu tun. Meine Vermutung: in Frames[ListBox.items.Count-1] steht nichts oder Frames.Count < ListBox.Items.Count!
Gruß,
Trutz
Tony-S - Mi 14.07.10 00:30
Hm ok also hab mal was geändert was das wohl betrifft und zwar hab ich den Startwert meiner Zählvariable
counter:=1 auf ;counter:=0; geändert, nun speichert es auch nur die ausgewählten...
Ist zwar immernoch etwas verworren irgendwie aber es läuft erstmal, danke euch, vorallem dir ASMFreak.
Ich editiere das hier noch mit entsprechenden Code heute Abend dann.
ASMFreak - Mi 14.07.10 00:33
Freut mich, gute NAcht!
Gruß, Trutz
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!