/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
ListView
Fra : Henning Madsen


Dato : 06-03-08 22:51

Jeg mangler en komponent noget i stil med ListBox
Der ønskes 2 kolonner og row der automatisk tilføjes som i ListBox
Colonner skal kunne varieres i bredden
Må også gerne kunne højre og venstre stilles
Indlæse data med noget lignende Add som i ListBox, men så noget med [1,2]

Har kikket meget på ListView som ser ud at kunne meget
men fatter ikke en dyt af hvordan den bruges og til hvad.
Hvis ListView er sagen er noget om hvordan den
sættes til at klare ovenstående kærkommen.

Eller er der en komponent der er bedre egnet ??

På forhånd tak
M.V.H.
Henning



 
 
Thomas Demant (08-03-2008)
Kommentar
Fra : Thomas Demant


Dato : 08-03-08 08:54

"Henning Madsen" <hkjeldm@mail.dk> skrev i en meddelelse
news:47d06764$0$2106$edfadb0f@dtext02.news.tele.dk...
> Jeg mangler en komponent noget i stil med ListBox
> Der ønskes 2 kolonner og row der automatisk tilføjes som i ListBox
> Colonner skal kunne varieres i bredden
> Må også gerne kunne højre og venstre stilles
> Indlæse data med noget lignende Add som i ListBox, men så noget med [1,2]
>
> Har kikket meget på ListView som ser ud at kunne meget
> men fatter ikke en dyt af hvordan den bruges og til hvad.
> Hvis ListView er sagen er noget om hvordan den
> sættes til at klare ovenstående kærkommen.
>
> Eller er der en komponent der er bedre egnet ??

Prøv følgende:
- sæt ViewStyle til vsReport (kan gøres fra Object Inspector'en).
- sæt RowSelect til True
- evt. ColumnClick til False, med mindre du har en plan om at kunne sortere
visningen ved at klikke på en kolonnes titel
- evt. ReadOnly til True, så "Caption" ikke kan ændres (Caption er den
første kolonne, de efterfølgende hedder SubItems)
- MultiSelect hvis flere rækker skal kunne markeres

For at tilføje kolonner skal du bruge Items (findes også i Object
Inspectoren) - evt. blot dobbeltklik på komponenten i din form.

Eksempel på at tilføje linje(r):
------------
procedure TForm1.Button1Click(Sender: TObject);
begin
with listview.Items.Add do
begin
Caption:='Smart, ikke?';
subitems.Add('Jo! ');
end;
end;
-------------

Læs caption, fra første markerede linje:
-------------
procedure TForm1.Button2Click(Sender: TObject);
begin
if ListView.SelCount = 1 then
ShowMessage(ListView.Selected.Caption);
end;
-------------
Skal du bruge flere linjer, der er markerede skal du kikke på GetNextItem.


Håber det ledte dig på vej

--
Venligst
Thomas Demant [4990 / 5700]



Henning Madsen (08-03-2008)
Kommentar
Fra : Henning Madsen


Dato : 08-03-08 20:07


"Thomas Demant" <news@dement.dk> skrev i en meddelelse
news:47d24610$0$90270$14726298@news.sunsite.dk...
> "Henning Madsen" <hkjeldm@mail.dk> skrev i en meddelelse
> news:47d06764$0$2106$edfadb0f@dtext02.news.tele.dk...
>> Jeg mangler en komponent noget i stil med ListBox
>> Der ønskes 2 kolonner og row der automatisk tilføjes som i ListBox
>> Colonner skal kunne varieres i bredden
>> Må også gerne kunne højre og venstre stilles
>> Indlæse data med noget lignende Add som i ListBox, men så noget med [1,2]
>>
>> Har kikket meget på ListView som ser ud at kunne meget
>> men fatter ikke en dyt af hvordan den bruges og til hvad.
>> Hvis ListView er sagen er noget om hvordan den
>> sættes til at klare ovenstående kærkommen.
>>
>> Eller er der en komponent der er bedre egnet ??
>
> Prøv følgende:
> - sæt ViewStyle til vsReport (kan gøres fra Object Inspector'en).
> - sæt RowSelect til True
> - evt. ColumnClick til False, med mindre du har en plan om at kunne
> sortere visningen ved at klikke på en kolonnes titel
> - evt. ReadOnly til True, så "Caption" ikke kan ændres (Caption er den
> første kolonne, de efterfølgende hedder SubItems)
> - MultiSelect hvis flere rækker skal kunne markeres
>
> For at tilføje kolonner skal du bruge Items (findes også i Object
> Inspectoren) - evt. blot dobbeltklik på komponenten i din form.
>
> Eksempel på at tilføje linje(r):
> ------------
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> with listview.Items.Add do
> begin
> Caption:='Smart, ikke?';
> subitems.Add('Jo! ');
> end;
> end;
> -------------
>
> Læs caption, fra første markerede linje:
> -------------
> procedure TForm1.Button2Click(Sender: TObject);
> begin
> if ListView.SelCount = 1 then
> ShowMessage(ListView.Selected.Caption);
> end;
> -------------
> Skal du bruge flere linjer, der er markerede skal du kikke på GetNextItem.
>
>
> Håber det ledte dig på vej
>
> --
> Venligst
> Thomas Demant [4990 / 5700]

> Tusind tak Thomas Det var guldkorn.
Der er to ting jeg mangler før jeg kan anvende ListView'en.
Jeg har brug for at læse det markerede men i anden kolonne.
Har skrevet følgende kode men den læser kun indholdet fra det markere i 1.
kolonne.
Har sat verdierne i Object Inspectore'en som du har foreskrevet, måske skal
de ændres ??

If ListView1.Selected = Nil Then Exit;
Edit1.Text := ListView1.Selected.Caption; (Troede jeg blot kunne
skifteCaption ud med SubItems.)

Det andet problem er Kolonnerne som jeg gerne vel sætte til en anden bredde
??
Har du lidt tid til overs vel dine komentar til ovennævnte være dejligt.
M.V.H.
Henning



Thomas Demant (08-03-2008)
Kommentar
Fra : Thomas Demant


Dato : 08-03-08 21:03

"Henning Madsen" <hkjeldm@mail.dk> skrev i en meddelelse
news:47d2e3e8$0$15885$edfadb0f@dtext01.news.tele.dk...
> <SNIP>
> Der er to ting jeg mangler før jeg kan anvende ListView'en.
> Jeg har brug for at læse det markerede men i anden kolonne.
> Har skrevet følgende kode men den læser kun indholdet fra det markere i 1.
> kolonne.
> Har sat verdierne i Object Inspectore'en som du har foreskrevet, måske
> skal de ændres ??
>
> If ListView1.Selected = Nil Then Exit;
> Edit1.Text := ListView1.Selected.Caption; (Troede jeg blot kunne
> skifteCaption ud med SubItems.)

Det klares let. Du er helt på rette vej, du skal bare huske at angive
hvilken kolonne du skal bruge. Her et eksempel på 2. kolonne (den der kommer
efter "Caption"):
edit1.text := ListView1.Selected.SubItem[0]; (jeg kan ikke lige huske om
det er SubItem[x] eller SubItems[x] - altså med eller uden 's'). For at læse
en anden kolonne ændre du 0'et til et andet tal.

> Det andet problem er Kolonnerne som jeg gerne vel sætte til en anden
> bredde ??
Når du har åbnet editoren, til at indsætte kolonner kan du markere den
kolonne du vil ændre. Derefter vises kolonnens egenskaber i Object
Inspectoren. De enkelte kolonner kan også findes i Delphi's Object TreeView,
under din ListView. Her kan du så vælge AutoSize eller angive en fast bredde
(Width).

--
Venligst
Thomas [5700 / 4990]



Henning Madsen (09-03-2008)
Kommentar
Fra : Henning Madsen


Dato : 09-03-08 20:32


"Thomas Demant" <news@dement.dk> skrev i en meddelelse
news:47d2f100$0$90276$14726298@news.sunsite.dk...
> "Henning Madsen" <hkjeldm@mail.dk> skrev i en meddelelse
> news:47d2e3e8$0$15885$edfadb0f@dtext01.news.tele.dk...
>> <SNIP>
>> Der er to ting jeg mangler før jeg kan anvende ListView'en.
>> Jeg har brug for at læse det markerede men i anden kolonne.
>> Har skrevet følgende kode men den læser kun indholdet fra det markere i
>> 1. kolonne.
>> Har sat verdierne i Object Inspectore'en som du har foreskrevet, måske
>> skal de ændres ??
>>
>> If ListView1.Selected = Nil Then Exit;
>> Edit1.Text := ListView1.Selected.Caption; (Troede jeg blot kunne
>> skifteCaption ud med SubItems.)
>
> Det klares let. Du er helt på rette vej, du skal bare huske at angive
> hvilken kolonne du skal bruge. Her et eksempel på 2. kolonne (den der
> kommer efter "Caption"):
> edit1.text := ListView1.Selected.SubItem[0]; (jeg kan ikke lige huske om
> det er SubItem[x] eller SubItems[x] - altså med eller uden 's'). For at
> læse en anden kolonne ændre du 0'et til et andet tal.
>
>> Det andet problem er Kolonnerne som jeg gerne vel sætte til en anden
>> bredde ??
> Når du har åbnet editoren, til at indsætte kolonner kan du markere den
> kolonne du vil ændre. Derefter vises kolonnens egenskaber i Object
> Inspectoren. De enkelte kolonner kan også findes i Delphi's Object
> TreeView, under din ListView. Her kan du så vælge AutoSize eller angive en
> fast bredde (Width).
>
> --
> Venligst
> Thomas [5700 / 4990]
> Hej Thomas
Lige en enkelt mere så tror jeg at klare mig ?
1. linie er ok med ListBoksen
2. og 3. linie med ListView er også ok blot skriver den ud i 2. kolonne
jeg vel gerne den gør det i 1. ???
Under var er tilføjet NytItem : TListItem;

//If sr.Name <> 'tom.Bmp' Then ListBox1.Items.Add
(Copy(sr.Name,0,Pos('.',sr.Name)-1));
NytItem := ListView1.Items.Add;
If sr.Name <> 'tom.Bmp' Then NytItem.Caption :=
Copy(sr.Name,0,Pos('.',sr.Name) -1);
Håber du vel rette min fejl
M.V.H.
Henning




Thomas Demant (16-03-2008)
Kommentar
Fra : Thomas Demant


Dato : 16-03-08 10:26

> Lige en enkelt mere så tror jeg at klare mig ?
> 1. linie er ok med ListBoksen
> 2. og 3. linie med ListView er også ok blot skriver den ud i 2. kolonne
> jeg vel gerne den gør det i 1. ???
> Under var er tilføjet NytItem : TListItem;
>
> //If sr.Name <> 'tom.Bmp' Then ListBox1.Items.Add
> (Copy(sr.Name,0,Pos('.',sr.Name)-1));
> NytItem := ListView1.Items.Add;
> If sr.Name <> 'tom.Bmp' Then NytItem.Caption :=
> Copy(sr.Name,0,Pos('.',sr.Name) -1);

Hej Henning

Jeg har ikke lige fået set i gruppen, i et par dage.
Men jeg må indrømme, at jeg ikke helt kan gennemskue din kildekode.
Som jeg ser det, skriver den værdien af
'Copy(sr.Name,0,Pos('.',sr.Name) -1);' i første kolonne (altså Caption) -
jeg kan ikke forstå det skulle komme ud i anden kolonne.

--
Thomas [4990 / 5700]



Henning Madsen (16-03-2008)
Kommentar
Fra : Henning Madsen


Dato : 16-03-08 21:27


"Thomas Demant" <news@dement.dk> skrev i en meddelelse
news:47dce7bb$0$90267$14726298@news.sunsite.dk...
>> Lige en enkelt mere så tror jeg at klare mig ?
>> 1. linie er ok med ListBoksen
>> 2. og 3. linie med ListView er også ok blot skriver den ud i 2. kolonne
>> jeg vel gerne den gør det i 1. ???
>> Under var er tilføjet NytItem : TListItem;
>>
>> //If sr.Name <> 'tom.Bmp' Then ListBox1.Items.Add
>> (Copy(sr.Name,0,Pos('.',sr.Name)-1));
>> NytItem := ListView1.Items.Add;
>> If sr.Name <> 'tom.Bmp' Then NytItem.Caption :=
>> Copy(sr.Name,0,Pos('.',sr.Name) -1);
>
> Hej Henning
>
> Jeg har ikke lige fået set i gruppen, i et par dage.
> Men jeg må indrømme, at jeg ikke helt kan gennemskue din kildekode.
> Som jeg ser det, skriver den værdien af
> 'Copy(sr.Name,0,Pos('.',sr.Name) -1);' i første kolonne (altså Caption) -
> jeg kan ikke forstå det skulle komme ud i anden kolonne.
>
> Thomas [4990 / 5700]

Hej Thomas
Sådan kom det til at se ud
PROCEDURE NavneFil;
Var
sr : TSearchRec;
Begin
Form1.ListView1.Items.Clear;
If FindFirst('C:\Havens Planter\Navne\*.JPG',faAnyFile,sr) = 0 Then
Begin
If(sr.Attr And faAnyFile) <= sr.Attr Then
Begin
If sr.Name <> 'tom.Bmp' Then
Form1.ListView1.Items.Add.SubItems.Add(Copy(sr.Name,0,Pos('.',sr.Name) -1));
End;
While FindNext(sr) = 0 Do
Begin
If (sr.Attr And faAnyFile) <= sr.Attr Then
Begin
If sr.Name <> 'Tom.Text' Then
Form1.ListView1.Items.Add.SubItems.Add(Copy(sr.Name,0,Pos('.',sr.Name)-1));
End;
End;
End;
End;

Så nu er jeg igang med næste problem ( fanden og hans lillefinger)
I en INI fil er der gemt en del navne med tilhørende data. Navnene står i
spredt rækkefølge og ønskes udlæst i ListView'en
i alfabetisk orden. I første kolonne skrives antallet af navn1 og i anden
kolonne skal stå navnet på navn1.
Navnene er overført til kolonne 2, hvor f.eks. navn1 forekommer flere gange.
Hvis nu ListView ligesom ListBox kunne sorterer var det jo simpelt at løbe
den igennem, tælle og sammenlig og smide dem væk der er over een.
Du fortalte noget om at sætte ColumnClick til false, hvis der ikke er planer
om sortering.
Det kunne tyde på at den kan sorter, så jeg prøvede at sætte den til True
men det ændrede ikke noget ??
Hvis den kan vel du så være rar at skrive lidt om det ?????
M.V.H.
Henning



Søg
Reklame
Statistik
Spørgsmål : 177422
Tips : 31962
Nyheder : 719565
Indlæg : 6407884
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste