Autor Beitrag
MephistoFFF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: 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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Di 12.08.2008 um 23:19
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 101

Windows XP
Delphi 2009
BeitragVerfasst: Do 14.08.08 03:18 
>Größe der Columns<
Du musst die größe der Columns im Objektinspektor einstellen :!:
:arrow: Property Width
:arrow: Property MinWidth
:arrow: Property MaxWidth

>Schreiben<
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin
  ListView1.Items.Clear;
  ListView1.Items.Add;
  ListView1.Items[ListView1.Items.Count - 1].Caption := 'Wert 1'; // Wert 1
  ListView1.Items[ListView1.Items.Count - 1].SubItems.Add('Wert 2'); // Wert 2
  ListView1.Items[ListView1.Items.Count - 1].SubItems.Add('Wert 3'); // Wert 3
end;


>Lesen<
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.ListView1DblClick(Sender: TObject);
var
  S: string;
begin
  if ListView1.Selected <> NIL then
  begin
    S := ListView1.Selected.Caption; // Wert 1
    S := S + #13 + ListView1.Selected.SubItems[0]; // Wert 2
    S := S + #13 + ListView1.Selected.SubItems[1]; // Wert 3
    ShowMessage(S);
  end;
end;


Für jede Frage solltest du ein extra Thread eröffnen damit man nicht durcheinander kommt :idea:

[EDIT] Der Code wurde von mir nicht getestet, wenn etwas falsch/unsicher ist sagt es bitte :-)
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 15.08.08 00:31 
Moin!

user profile iconMephistoFFF 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 101

Windows XP
Delphi 2009
BeitragVerfasst: Fr 15.08.08 05:02 
Ich vermute das du mehr Werte auslesen möchtest als du in der Liste hast...
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Fr 15.08.08 11:14 
Also, ich habe das genau so zum Testen eingebaut:

ausblenden Delphi-Quelltext
1:
2:
3:
    S := form1.ListView1.Selected.Caption; // Wert 1
    S := S + #13 + form1.ListView1.Selected.SubItems[0]; // Wert 2
    S := S + #13 + form1.ListView1.Selected.SubItems[1]; // Wert 3


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Windows 7 Professional 32Bit
Delphi 2009 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 83



BeitragVerfasst: Fr 15.08.08 12:00 
user profile iconMephistoFFF 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
    S := ListView1.items.Item[0].caption; // Wert 1
    S := S + #13 + listview1.items.item[0].subitems[0]; // Wert 2
    S := S + #13 + listview1.items.item[0].subitems[1]; // Wert 3


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Windows 7 Professional 32Bit
Delphi 2009 Enterprise
BeitragVerfasst: Fr 15.08.08 13:11 
user profile iconMephistoFFF 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if Assigned(form1.ListView1.Selected) then
begin
  S := form1.ListView1.Selected.Caption; // Wert 1
  S := S + #13 + form1.ListView1.Selected.SubItems[0]; // Wert 2
  S := S + #13 + form1.ListView1.Selected.SubItems[1]; // Wert 3
end
else
begin
  Showmessage('Ups! Kein Eintrag ausgewählt');
end;


mfg
wazup
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 101

Windows XP
Delphi 2009
BeitragVerfasst: Fr 15.08.08 14:31 
ausblenden volle Höhe Delphi-Quelltext
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 :!: