Autor Beitrag
patrick dee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Mo 21.05.07 08:01 
Morgen zusammen


habe eine Frage : Habe eine ListBox die mir als Playliste dient.

8000-01 ABBA WATERLOO 03:19
8545-15 BEE GEES WORD 02:55

Wie bekomme ich es hin das die Länge der Titel untereinander stehen. Könnte doch mit Pos suchen irgenwie gehen. Also die Länge des Titels herausnehmen und nach rechts verschieben - immer um den gleichen Abstand von links.
Müßte irgendwie nach den Doppelpunkt gesucht werden - oder ?

Kann mir jemand Helfen ???

Danke und einen sonnigen Tag

Patrick

_________________
Glauben heißt nichts wissen ...
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mo 21.05.07 08:46 
Hallo,

Eine Möglichkeit:
www.delphipraxis.net...n+sortieren+tlistbox
statt
function CompareInt(List: TStringList; Index1, Index2: Integer): Integer;
etwas eigenes komponieren.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function CompareLast5(List: TStringList; Index1, Index2: Integer): Integer; 
var 
  i : integer;
  S1,S2 : string;
begin 
  I := length(List[Index1]);
  IF i  > 5 then 
    S1 := Copy(List[Index1],i-5,5)
   else 
    S1 := List[Index1];
  I := length(List[Index2]);
  IF i  > 5 then 
    S1 := Copy(List[Index2],i-5,5)
   else 
    S1 := List[Index2];
  
  CompareLast5 := CompareText(S1,S2);
  S1:='';
  S2:='';
 end;


Besser verwendest Du mehrere Spalten.
Oder soetwas www.delphi-forum.de/...;highlight=sortieren ?

Gruß Horst
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 21.05.07 09:37 
Hallo,

user profile iconpatrick dee hat folgendes geschrieben:
Wie bekomme ich es hin das die Länge der Titel untereinander stehen. Könnte doch mit Pos suchen irgenwie gehen. Also die Länge des Titels herausnehmen und nach rechts verschieben - immer um den gleichen Abstand von links.
Müßte irgendwie nach den Doppelpunkt gesucht werden - oder ?...
vermute eher das er das erreichen möchte:
ausblenden Quelltext
1:
2:
8000-01 ABBA WATERLOO 03:19
0815-15 A-AH VELVET   02:55



Sind Die Anzahl Zeichen der ID('8000-01') und der Länge des Titels('03:19') immer gleich?
Dann brauchst Du nur den längsten Eintrag suchen.

Ps.: Ich würde eine ListView mit drei Columns nehmen, mit ListView.RowSelect = True

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
patrick dee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Mo 21.05.07 10:02 
Hei Danke schon mal für die Tips.

Also die Playlisten lade ich in die ListBox mit LoadFromFile. Die Zeitangabe wie lang der Titel ist sind immer gleich.
Habe auch schon überlegt - ob das geht ???? - die Liste umzubauen. Da die Nummern 800-01 in einer Paradox Datenbank drinnen stehen müsste es doch auch gehen das man die Original Liste lädt die als 21-05-07.mr1 File vorliegt. Und dann die Nummer durchgeht und die Liste neu aufbaut so das ich auch einen Abstand zwischen Titel und Interpret habe.

8000-01 ABBA WATERLOO 03:30
8001-05 BEE GEES WORDS 02:59

Und dann als 21-05-07.li1 speichert und diese in der ListBox zu sehen ist.

Wäre natürlich noch übersichtlicher. Oder gibt es ein Elegantere Lösung ???

Danke an aller fleißigen Helfer

Patrick

_________________
Glauben heißt nichts wissen ...
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mo 21.05.07 13:29 
Hallo,

kann paradoxdateien nicht direkt mittels Delphi [url=www.byronref.com/rmb...pecs.htm]damit[/url] dort PXFORMAT.ZIP ->PXFMT.pas auslesen?
Dann kannst Du direkt die Spalten der Listbox richtig belegen.

Gruß Horst
patrick dee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Mo 21.05.07 15:49 
Hallo Horst_H

wie rufe ich diese function auf mit einer ListBox1 ???


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function CompareLast5(List: TStringList; Index1, Index2: Integer): Integer; 
var 
  i : integer;
  S1,S2 : string;
begin 
  I := length(List[Index1]);
  IF i  > 5 then 
    S1 := Copy(List[Index1],i-5,5)
   else 
    S1 := List[Index1];
  I := length(List[Index2]);
  IF i  > 5 then 
    S1 := Copy(List[Index2],i-5,5)
   else 
    S1 := List[Index2];
  
  CompareLast5 := CompareText(S1,S2);
  S1:='';
  S2:='';
 end;


also ich blicke noch nicht durch. Danke aber für deine schnelle Hilfe

lg Patrick

_________________
Glauben heißt nichts wissen ...
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mo 21.05.07 17:00 
Hallo,

Uups , ich dachte Du hättest den Delphipraxis-Link durchgelesen...

Aber Du musst Die Funktion CompareLast5 mal testen , ob sie es so richtig tut, also ob da -4 oder -5 richtig ist.

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:
function CompareLast5(List: TStringList; Index1, Index2: Integer): Integer;  
//Vergleicht die Letzten Zeichen der Strings in einer Stringliste aber maximal 5
var  
  i : integer; 
  S1,S2 : string
begin  
  I := length(List[Index1]); 
  IF i  > 5 then  
    S1 := Copy(List[Index1],i-4,5
   else  
    S1 := List[Index1]; 

  I := length(List[Index2]); 
  IF i  > 5 then  
    S2 := Copy(List[Index2],i-4,5
   else  
    S2 := List[Index2]; 
   
  CompareLast5 := CompareText(S1,S2); 
  S1:=''
  S2:=''
 end;  

procedure TForm1.Button1Click(Sender: TObject); 
var 
  sl: TStringList; 
begin 
  sl := TStringList.Create; 
  try 
    // listbox1.Sorted := False; //Ist voraussetzung, sonst nimmt die Standard-Vergleichsfunktion, rate ich mal
    sl.Assign(listbox1.Items); 
    //sl.CustomSort(CompareInt); 
    sl.CustomSort(CompareLast5);// Die neue spezialvergleichsfunktion
    listbox1.Items.Assign(sl); 
  finally 
    sl.Free; 
  end
end;


Also einfach mal eine Listbox mit 19000,28000,37000,73000,81000,90000 füllen und testen was passiert

Gruß Horst
patrick dee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Mo 21.05.07 17:23 
hallo horst_h

danke für die schnelle Antwort. Werde ich mal testen und melde mich dann wieder.

schönen Abend

patrick

_________________
Glauben heißt nichts wissen ...