procedure Form1.FormActivate(Sender: TObject);
var
i: integer;
begin
with qryBilder
do // ADOQery
begin
SQL.Clear;
SQL.Add('
SELECT * FROM BILDER WHERE IDPOSITION = :IDPOSITION ORDER BY SORT');
Parameters.ParamByName('
IDPOSITION').Value := PosDSet.FieldByName('
ID').Value;
//PosDSet ist das DataSet für die Positionen
Open;
end;
LoadPics(PosDSet.FieldByName('
ID').AsInteger);
// LoadPics aufrufen und Bilder der entspr. Position in das Gridpanel laden
end;
procedure TfmPosPics.LoadPics(POSID: integer);
// Prozedur zum laden der Bilder in das Gridpanel
var
img: TImage;
Pfad, Bild:
string;
begin
Pfad := '
c:\Bilder\';
qryBilder.First;
// Gridpanel leeren
GridPanel1.ControlCollection.Clear;
while not qryBilder.Eof
do
begin
img := TImage.create(Self);
img.Parent := GridPanel1;
img.AutoSize := false;
img.Stretch := true;
img.Tag := qryBilder.FieldByName('
ID').Value;
img.Width := 100;
img.height := 80;
Bild := Pfad + TRIM(qryBilder.FieldByName('
ID').text) + '
.jpg';
img.Picture.LoadFromFile(Bild);
img.Cursor := crHandPoint;
img.DragMode := dmManual;
img.OnDragOver := MyDragOver;
img.OnDragDrop := MyDragDrop;
img.OnMouseDown := MyMouseDown;
img.OnClick := ImgTemplateClick;
qryBilder.Next;
end;
end;
//Prozedur für DragOver
procedure Form1.MyDragOver
(Sender, Source: TObject;
X, Y: Integer; State: TDragState;
var Accept: Boolean);
begin
Accept := (Source
is TImage);
end;
// Prozedur für DragDrop
procedure Form1.MyDragDrop
(Sender, Source: TObject; X, Y: Integer);
var
tImg: TImage;
Picx, Picy : integer;
begin
Picx := (Sender
as TImage).Tag;
Picy := (Source
as TImage).Tag;
tImg := TImage.Create(Self);
tImg.AutoSize := false;
tImg.Stretch := true;
tImg.Picture.Assign((Sender
as TImage).Picture);
// Ziel-Bild zwischenspeichern
if Source
is TImage
then
try
(Sender
as TImage).Picture.Assign((Source
as TImage).Picture);
(Source
as TImage).Picture.Assign(tImg.Picture);
// Zwischengespeichertes Bild einfügen
end;
finally
tImg.Free;
end;
LoadPics(PosDSet.FieldByName('
ID').AsInteger);
// LoadPics aufrufen und Bilder der entspr. Position in das Gridpanel erneut laden
end;
// Prozedur für MouseDown !!!!!!!!!!!!!! ACHTUNG Beim verschieben muss die CTRL-Taste gedrückt werden !!!!!!!!!!!!!!!!!!!!!!
procedure Form1.MyMouseDown(Sender: TObject; Button: TMouseButton; Shift:
TShiftState; X, Y: Integer);
begin
if ssCtrl
in Shift
then
(Sender
as TImage).BeginDrag(True);
end;