| Autor |
Beitrag |
MephistoFFF
      
Beiträge: 60
Win 7
|
Verfasst: Di 12.08.08 23:17
Hallo!
Ich bin gerade dabei ein Programm zu schreiben, was den User an vorher eingetragene Ereignisse erinnert ( nach Datum und Zeit).
Die eingetragenen Ereignis sollen in einem TListview angegeben werden.
Im Moment mache ich erstmal nur das GUI, und da hab ich schon die ersten Probleme. Beim Tlistview kann man ja mehrere Columns definieren, das geht auch soweit und die werden auch angezeigt. aber wenn ich sie im "Editor" zurechtziehe ( also die Breite ) werden sie im Programm dann auf den Standard zurückgesetzt.
Wie kann ich vermeiden dass die Columns wieder auf den Standard gehen und vor allem wie kann ich vermeiden, dass vom User die breite geändert werden kann?
Und dann die nächste Frage: kann mir jemand sage, bzw gibt es ein Tutorial wie man das Tlistview ansteuert und ausliest?
wäre nett!
ich bedanke mich im Voraus.
mfG
Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 12.08.2008 um 23:19
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Do 14.08.08 01:49
hmm... kann niemand helfen? hat noch nie jemand mit listview gearbeitet?
Sorry für den Doppelpost... aber die Listview ist eine sehr entscheidende komponente für mein programm^^
Danke
mfG
|
|
wazup
      
Beiträge: 101
Windows XP
Delphi 2009
|
Verfasst: Do 14.08.08 03:18
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Do 14.08.08 17:59
Vielen Dank!
Ich werde es heute noch versuchen... falls etwas nicht klappt melde ich mich nochmal.
aber wie gesagt, schon mal vielen dank!
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Do 14.08.08 23:31
Also... ich hab das jetzt genau so eingebaut wie du es gesagt hast.
Wenn ich jetzt allerdings das auslesen aktiviere ( über einen button ), gibt es folgenden Fehler:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung "Zugriffsverletzung bei Adresse... in Modul Project1.exe". Lesen von Adresse ... aufgetreten.
Irgendwelche Ideen^^ ?
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 15.08.08 00:31
Moin!
MephistoFFF hat folgendes geschrieben: | | Irgendwelche Ideen^^ ? |
Klar
1. Genaue Fehlerbeschreibung (mit der Adresse)
2. Code
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
wazup
      
Beiträge: 101
Windows XP
Delphi 2009
|
Verfasst: Fr 15.08.08 05:02
Ich vermute das du mehr Werte auslesen möchtest als du in der Liste hast...
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Fr 15.08.08 11:14
Also, ich habe das genau so zum Testen eingebaut:
Delphi-Quelltext 1: 2: 3:
| S := form1.ListView1.Selected.Caption; S := S + #13 + form1.ListView1.Selected.SubItems[0]; S := S + #13 + form1.ListView1.Selected.SubItems[1]; |
S Wurde als String definiert.
Bevor ich die Liste auslesen lasse habe ich natürlich werte ( vorher in der selben Procedur ) eintragen lassen. Das Eintragen funktioniert auch ( Natürlich nur wenn ich das auslesen zum test aus dem code rausnehme). Nach dem eintragen befidnet sich eine zeile mit 4 spalten an eingetragenen werten in der listview.
Hier nochmal der Fehlercode:
...bei Adresse 00489639 ...
...Lesen von Adresse 00000024 aufgetreten ...
Ich hoffe ihr könnt mir helfen.
Danke schonmal.
mfG
|
|
ThunderDragon
      
Beiträge: 26
Windows 7 Professional 32Bit
Delphi 2009 Enterprise
|
Verfasst: Fr 15.08.08 11:32
So wie du das geschrieben hast, müsste es eigentlich klappen.
Du musst nur darauf achten, dass SubItems[0] und SubItems[1] auch existieren.
Und es muss ein Element in der ListView Markiert sein.
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Fr 15.08.08 11:37
Die Subitems dürften existieren.
Nur habe ich kein Element der Liste markiert... wie kann ich das umgehen, dass ein Element markiert sein muss?
|
|
PeterPain
      
Beiträge: 83
|
Verfasst: Fr 15.08.08 12:00
MephistoFFF hat folgendes geschrieben: | Die Subitems dürften existieren.
Nur habe ich kein Element der Liste markiert... wie kann ich das umgehen, dass ein Element markiert sein muss? |
wie willst du den text eines markierten eintrags ausgeben, wenn keiner markiert ist? Wenn du was anderes machen möchtest, musst du halt anderen code schreiben (ein spezielles Item wählen, oder was auch immer).
Generell würde ich dir, genauso wie allen anderen TListView benutzern, die VirtualTrees von Mike Lischke nahelegen, die in funktionalität sowie performanz weit überlegen sind.
gruss
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Fr 15.08.08 12:02
Also... ich will alle Eintragungen in der Listview ( Zeile für zeile ) auslesen lassen und jede einzelne zeile mit allen ihren spalten als string haben... egal ob da was angewählt ist oder nicht... ^^
danke  .
mfG
EDIT: Ich habs vorerst geschafft:
Delphi-Quelltext 1: 2: 3:
| S := ListView1.items.Item[0].caption; S := S + #13 + listview1.items.item[0].subitems[0]; S := S + #13 + listview1.items.item[0].subitems[1]; |
So funktioniert das ganze erstmal, wie ich es will... Ich bitte den Thread aber offen zu lassen, falls es doch noch probleme gibt.
nochmal danke an alle
mfG
|
|
ThunderDragon
      
Beiträge: 26
Windows 7 Professional 32Bit
Delphi 2009 Enterprise
|
Verfasst: Fr 15.08.08 13:11
MephistoFFF hat folgendes geschrieben: | Die Subitems dürften existieren.
Nur habe ich kein Element der Liste markiert... wie kann ich das umgehen, dass ein Element markiert sein muss? |
Wenn dus doch mit Selected machen möchtest, fang es doch einfach ab:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if Assigned(form1.ListView1.Selected) then begin S := form1.ListView1.Selected.Caption; S := S + #13 + form1.ListView1.Selected.SubItems[0]; S := S + #13 + form1.ListView1.Selected.SubItems[1]; end else begin Showmessage('Ups! Kein Eintrag ausgewählt'); end; |
mfg
|
|
wazup
      
Beiträge: 101
Windows XP
Delphi 2009
|
Verfasst: Fr 15.08.08 14:31
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:
| procedure TForm1.Button1Click(Sender: TObject); var S: string; I: Integer; Q: Integer; begin Memo1.Clear;
for I := 0 to ListView1.Items.Count - 1 do begin S := '"' + ListView1.Items[I].Caption + '" ';
for Q := 0 to ListView1.Items[I].SubItems.Count - 1 do S := S + '"' + ListView1.Items[I].SubItems[Q] + '" ';
Memo1.Lines.Add(S); end; end;
procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin for I := ListView1.Items.Count to ListView1.Items.Count + 10 do begin ListView1.Items.Add; ListView1.Items[I].Caption := 'Value 1'; ListView1.Items[I].SubItems.Add('Value 2'); ListView1.Items[I].SubItems.Add('Value 3'); ListView1.Items[I].SubItems.Add('Value 4'); end; end;
procedure TForm1.ListView1DblClick(Sender: TObject); var S: string; Q: Integer; begin if Assigned(ListView1.Selected) then begin S := IntToStr(ListView1.Selected.Index) + ' "' + ListView1.Selected.Caption + '" ';
for Q := 0 to ListView1.Selected.SubItems.Count - 1 do S := S + '"' + ListView1.Selected.SubItems[Q] + '" ';
ShowMessage(S); end; end; |
Es wird alles ausgelesen und es kommen keine Fehler 
|
|