Autor Beitrag
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 23.01.06 17:25 
Ich möchte eine ListBox mit möglichen Inhalten einer Tabelle füllen. Die Spalten meine ich. Die Spalte, welche als erstes angezeigt werden soll, soll den Index 0 haben, die zweite die angezeigt werden soll, soll den Index 1 in der Listbox haben. Nun möchte ich aber in der ListBox die Reihenfolge der Spalten ändern können. Entweder durch das anklicken eines Eintrages in der ListBox und dann hoch oder runter schieben, oder durch das Anklicken und dann mit Pfeiltasten hoch oder runter legen. Beides will nicht so recht funktionieren. Gibt es vielleicht eine andere Komponente, die das beherrscht?
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 23.01.06 18:02 
Hallo

etwas code aus einem meiner projekte

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:
49:
50:
51:
52:
53:
//verschieben per buttons (2 Speedbuttons hoch und runter)
procedure TFrameAuswahl.SpeedButton_hochClick(Sender: TObject);
var NeuerIndex: Integer;
begin
  if (ListBox.ItemIndex<>-1and (ListBox.ItemIndex>0then
    begin
      NeuerIndex:=ListBox.ItemIndex-1;
      ListBox.items.Move(ListBox.ItemIndex,NeuerIndex);
      ListBox.ItemIndex:=NeuerIndex;
    end;
  SpeedbuttonsAktualisieren;
end;

procedure TFrameAuswahl.SpeedButton_runterClick(Sender: TObject);
var NeuerIndex: Integer;
begin
  if (ListBox.ItemIndex<>-1and (ListBox.ItemIndex<ListBox.items.Count-1then
    begin
      NeuerIndex:=ListBox.ItemIndex+1;
      ListBox.items.Move(ListBox.ItemIndex,NeuerIndex);
      ListBox.ItemIndex:=NeuerIndex;
    end;
  SpeedbuttonsAktualisieren;
end;

procedure TFrameAuswahl.SpeedbuttonsAktualisieren;/--> auch am Anfang aufrufen
begin
  SpeedButton_hoch.Enabled := (ListBox.ItemIndex > 0);
  SpeedButton_runter.Enabled := (ListBox.ItemIndex < ListBox.Count - 1);
end;

//verscheiben per Drag and drop, dragmode auf dmautomatic

procedure TFrameAuswahl.ListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
var i,i2 : integer;
    lbSource,lbSender : TListBox;
begin
  { TODO: allgemeiner code, Dragover auf ein und dieselbe Listbox beschränken }
  lbSource := Source as TListBox;
  lbSender := Sender as TListbox;
  //kein Multiselect!
  i2:=lbSender.ItemAtPos(point(x,y),false);
  if (i2<>-1and (i2<lbSource.Count) and (lbSource.ItemIndex<>-1then
    begin
      lbSource.Items.Move(lbSource.ItemIndex,i2);
      lbSource.ItemIndex:=i2;
    end;
end;

procedure TFrameAuswahl.ListBoxDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  accept := (Source is TListBox);
end;


Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)