Autor Beitrag
lexmy3
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 11:25 
Hallo

Ich versuche die Items innerhalb einer CheckListBox verschieben zu konnen per Drag&Drop, doch es macht nicht was ich will. Kann einer vieleicht ein Tip geben???

Habe diesen Quellcode hier gefunden und auf mein Prog. umgeschrieben, doch es bewegt sich die Ganze CheckListBox und nicht die Items innerhalb WARUM???
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:
//Akzeptieren der Items in der CheckListBox ////////////////////
procedure TFormGeneral.CheckListBoxGeneralDragOver(Sender, Source: TObject;
  X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
    Accept := Source is TCheckListBox;
end;


// Drag&Drop innerhalb der CheckListBox/////////////////////////////////////
procedure TFormGeneral.CheckListBoxGeneralDragDrop(Sender, Source: TObject;
  X, Y: Integer);
var
  iTemp : integer;
  ptTemp : TPoint;
  szTemp : String;

begin
{Ändern Sie den x, y Koordinaten in eine TPoint-Aufzeichnung}
  ptTemp.x:=x;
  ptTemp.y:=y;  

   {Verwende eine While-Schleife statt for-Schleife wegen Items
   welche von listboxes entfernt werden, den das eine Exeption verhindert}

  iTemp := 0;
  While iTemp <= TCheckListBox(Source).Items.Count-1 do
  begin

    {Suchen nach den ausgewählten Items, welche zu bewegen sind}
    if TCheckListBox(Source).selected[iTemp] then
    begin

       {benutze With um den Code leichter lesen zu können}
      With Sender as TCheckListBox do
      begin

      {hier muss eine vorläufige Variable verwenden werden,denn wenn der Item
      gelöscht wird, wird sich das Indexieren ändern}

        szTemp := TCheckListBox(Source).items[iTemp];

      { Löscht den Item, der geschleppt(Drag) wird}
        TCheckListBox(Source).items.Delete(iTemp);

{Fügt den Item in die richtige Position in CheckListBox ein, auf der es fallengelassen wird}
        items.Insert(itemAtPos(ptTemp,true),szTemp);
      end;  
    end;
    inc(iTemp);
  end;
end;


Mfg

Lexmy3
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 04.01.06 11:29 
Items ist vom Typ TStrings und da gibt es Excchange als Methode :!:

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!


Zuletzt bearbeitet von Kroko am Mi 04.01.06 11:45, insgesamt 1-mal bearbeitet
lexmy3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 11:36 
user profile iconKroko hat folgendes geschrieben:
Items ist vom Typ TStrings und da gigt es Excchange als Methode :!:


Hey es geht, musste nur im Objektinspector unter Eigenschaften DragKind auf dkDrag umstellen!!!!!!!!!!!

Und es geht doch!!!!!!!!!

Trotzdem Danke

mfg

Gruß aus Frankfurt
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 04.01.06 11:42 
user profile iconlexmy3 hat folgendes geschrieben:
...

Und es geht doch!!!!!!!!!

...


Wenn man nach Byte bezahlt wird schon :P

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
lexmy3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 12:11 
user profile iconKroko hat folgendes geschrieben:
user profile iconlexmy3 hat folgendes geschrieben:
...

Und es geht doch!!!!!!!!!

...


Wenn man nach Byte bezahlt wird schon :P


Hey,
wenn du eine andere/kürzere Möglichkeit hast dann bin ich gerne bereit es umzuändern.
lexmy3 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140

WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
BeitragVerfasst: Mi 04.01.06 12:30 
So So nach deiner Kritik habe ich noch einwenig rum gestöbert und dies entdeckt.

Das geht auch und ist um einige Zeilen kürzer!!!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
                 // DRAG&DROP  innerhalb der CheckListBox //

procedure TFormSewage.CheckListBoxSewageDragOver(Sender, Source: TObject;
  X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := Source is TCheckListBox;  //akzeptieren der Items innerhalb der CheckListBox
//oder
//if source is TCheckListbox then accept:=true else accept:=false;
end;

procedure TFormSewage.CheckListBoxSewageDragDrop(Sender, Source: TObject;
  X, Y: Integer);
begin
CheckListBoxSewage.Items.Move(CheckListBoxSewage.ItemIndex,CheckListBoxSewage.ItemAtPos(point(x,y),true));
end;


Mfg

Willi