Avatar billede antialize Nybegynder
18. oktober 2001 - 21:28 Der er 21 kommentarer

drop

Jeg har en list som indeholder nogle navne...
for hver af emnerne er der en buffer med noget data...

Hvordan kan jeg lave det såddan at jeg kan trække et enme ud af listen til Explorer og oprette en fil der hvor den bliver droppet??
Avatar billede borrisholt Novice
18. oktober 2001 - 21:49 #1
Anders Melander har en komponent suite der hedder noget med drag og drop ... Kig på han side http://www.melander.dk/delphi/dragdrop/#Download der finder du et eksemple der kan det du efter spørger.

Jens B
Avatar billede borrisholt Novice
18. oktober 2001 - 22:38 #2
Hvorfor nu det ?

Jens B
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:40 #3
Jeg her downloadet den der D&D ting fra anders med det er noget lort.. Den kan heller ikke det jeg gerne vil have den til, jeg skal ikke kopiere en fil, men lave en fil ud fra en Buffer.
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:41 #4
Jeg har lavet det den ene vej.... det eneste jeg mangler er den anden vej.. fra listen og ud...
Avatar billede borrisholt Novice
18. oktober 2001 - 22:45 #5
Må jeg lave et eksemple til dig med ANDERES komponenter ?

Jens B
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:47 #6
Jeg vil helst være fri for treideparts komponenter... men hvis du har lyst så ok.. men der må da være en nem måde... det var da meget næmt at får det til at virke så at man kunne trække filer ind...
Avatar billede borrisholt Novice
18. oktober 2001 - 22:49 #7
Der er IKKE en nem måde .. COM interfacet til din Explore ER meget grimt ..... Det har Anders formået at pakke pænet ind ... Filer TIL og FRA din Application har INTET med hinanden at gøre ...

Jens B
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:49 #8
Lortet skal sq bare virke.. M.V.H Jakob
Avatar billede borrisholt Novice
18. oktober 2001 - 22:49 #9
OG du har downloaded ExtractDemo.zip  ?

Jens B
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:50 #10
Hmm hvis jeg skal bruge com.. så bare lav et eksempel... jeg har brugt timer på at arbejte med DirectX og det der forfærtelige QuaseCom ting...
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:50 #11
Ja det har jeg....
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:51 #12
Jeg poster lige min nuværenede kode så kan du komme med dit giniale indfald...
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:51 #13
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ZDBM,ShellApi,
  ComCtrls, Menus,DropSource , StdCtrls, Buttons, ExtCtrls, FileCtrl, Grids, Outline, DirOutln;

type
  TMainForm = class(TForm)
    ListView: TListView;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    CreateArchive1: TMenuItem;
    Open1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Archive1: TMenuItem;
    AddFile1: TMenuItem;
    MoveFile1: TMenuItem;
    ExtractFile1: TMenuItem;
    Delete1: TMenuItem;
    StatusBar1: TStatusBar;
    OpenArcDialog: TOpenDialog;
    SaveArcDialog: TSaveDialog;
    PopupMenu1: TPopupMenu;
    AddFiles1: TMenuItem;
    MoveFiles1: TMenuItem;
    Extractitems1: TMenuItem;
    DeleteItemss1: TMenuItem;
    N2: TMenuItem;
    SelectAll1: TMenuItem;
    N3: TMenuItem;
    Preferenses1: TMenuItem;
    About1: TMenuItem;
    procedure CreateArchive1Click(Sender: TObject);
    procedure Open1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure AddFile1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ExtractFile1Click(Sender: TObject);
    procedure MoveFile1Click(Sender: TObject);
    procedure Delete1Click(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
    procedure SelectAll1Click(Sender: TObject);
    procedure Preferenses1Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ListViewStartDrag(Sender: TObject;
      var DragObject: TDragObject);
  private
    { Private declarations }
  public
    DB:Pointer;
    procedure UpdateList;
    procedure DropFiles(var DropFileMsg: TwmDropFiles); message wm_dropfiles;
    { Public declarations }
  end;

var
  MainForm: TMainForm;


implementation

uses Password, Prossess, ConfirmDelete, Config, About;



function PCharToStr(S:Pointer):string;
var
  i:integer;
  St:string;
begin
  St := \'\';
  i := 0;
  while( Byte(S^) <> 0) and (i < 256) do
  begin
    St := St + char(S^);
    s := Pointer( Longint(S)+1);
  end;
  result := St;
end;

function StrToPChar(s:string):Pointer;
var
  Buffer:pointer;
  i:integer;
  l:longint;
begin
  GetMem(Buffer,Length(s)+1);
  l := longint(Buffer);
  for i := 1 to Length(s) do
  begin
    char(Pointer(l)^) := s[i];
    Inc(l);
  end;
  byte(Pointer(l)^) := 0;
  result := Buffer;
end;
{$R *.DFM}

procedure TMainForm.UpdateList;
var
  Count:longint;
  i:longint;
  Name:PChar;
  Size:longint;
  ID:longint;
  Item:TListItem;
  s:string;
begin
  ListView.Items.Clear;
  if ZDBCountItems(DB,@Count) = 0 then
  begin
    for i := 1 to Count do
    begin
      ZDBGetID(DB,i-1,@ID);
      ZDBGetItemInfo(DB,ID,@Name,@Size);
      Item := ListView.Items.Add;
      Item.Caption := Name;

      if (Size < 1024) then
        Item.SubItems.Add(IntToStr(Size)+\' B\')
      else if (Size < 1024*1024) then
      begin
        s := IntToStr(Round( Size / (1024/10)) );
        SetLength(s,Length(s)+1);
        s[Length(s)] := s[Length(s)-1];
        s[Length(s)-1] := \'.\';
        Item.SubItems.Add(s+\' KB\');
      end else begin
        s := IntToStr(Round(Size / (1024*1024/10)));
        SetLength(s,Length(s)+1);
        s[Length(s)] := s[Length(s)-1];
        s[Length(s)-1] := \'.\';
        Item.SubItems.Add(s+\' MB\');
      end;

    end;
  end;
  Width := Width +1;
  Width := Width -1;
end;

procedure TMainForm.CreateArchive1Click(Sender: TObject);
var
  TempDB:Pointer;
  OK:Bool;
  s:string;
  s2:string;
begin
  PasswordForm.Edit1.Text := \'\';
  if SaveArcDialog.Execute then
    if PasswordForm.ShowModal = mrOK then
      OK := true;
      if ConfigForm.Pref.ComfirmPasswordOnCreate then
      begin
        s2 := PasswordForm.Edit1.Text;
        PasswordForm.Edit1.Text := \'\';
        s := PasswordForm.Label1.Caption;
        PasswordForm.Label1.Caption := \'Comfirm password:\';
        ok := PasswordForm.ShowModal = mrOK;
        if ok then
          if PasswordForm.Edit1.Text <> s2 then
            ok := false;
        PasswordForm.Label1.Caption := s;
      end;
      if not ok then
        ShowMessage(\'Password not comfirmed\')
      else
      begin
        if ZDBCreate(StrToPChar(SaveArcDialog.FileName),@TempDB,StrToPChar(PasswordForm.Edit1.Text)) <> 0 then
          ShowMessage(\'Unabel to Create Archive\')
        else
        begin
          ZDBClose(DB);
          DB := TempDB;
          Caption := ExtractFileName(SaveArcDialog.FileName)+\' - Zioncrypt\';
          MainMenu1.Items.Items[1].Enabled := true;
          UpdateList;
        end;
  end;
end;

procedure TMainForm.Open1Click(Sender: TObject);
var
  TempDB:Pointer;
begin
  if OpenArcDialog.Execute then
    if PasswordForm.ShowModal = mrOk then
      if ZDBOpen(StrToPChar(OpenArcDialog.FileName),@TempDB,StrToPChar(PasswordForm.Edit1.Text)) <>  0 then
        ShowMessage(\'Unabel to open Archive\')
      else
      begin
        ZDBClose(DB);
        DB := TempDB;
        Caption := ExtractFileName(OpenArcDialog.FileName)+\' - Zioncrypt\';
        MainMenu1.Items.Items[1].Enabled := true;
        UpdateList;
      end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  DB := nil;

  dragacceptfiles( MainForm.WindowHandle  ,true);;
end;

procedure TMainForm.AddFile1Click(Sender: TObject);
begin
  ProssessForm.AddFiles(DB,false);
  UpdateList;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
ProssessForm.LV := ListView;
ConfigForm.LoadPref;
ConfigForm.CfgPath := GetCurrentDir;
end;

procedure TMainForm.ExtractFile1Click(Sender: TObject);
begin
  ProssessForm.ExtractFiles(DB);
end;

procedure TMainForm.MoveFile1Click(Sender: TObject);
begin
  ProssessForm.AddFiles(DB,true);
    UpdateList;
end;

procedure TMainForm.Delete1Click(Sender: TObject);
begin
  if (not ConfigForm.Pref.ConfirmDelete) or (ComfirmDeleteForm.ShowModal = mrYes) then
  begin
    ProssessForm.DeleteFiles(DB);
    UpdateList;
  end;
end;

procedure TMainForm.PopupMenu1Popup(Sender: TObject);
begin
  PopupMenu1.Items.Items[0].Enabled := false;
  PopupMenu1.Items.Items[1].Enabled := false;
  PopupMenu1.Items.Items[2].Enabled := false;
  PopupMenu1.Items.Items[3].Enabled := false;
  if DB <> nil then
  begin
    PopupMenu1.Items.Items[0].Enabled := true;
    PopupMenu1.Items.Items[1].Enabled := true;
  end;
  if ListView.SelCount > 0 then
  begin
    PopupMenu1.Items.Items[2].Enabled := true;
    PopupMenu1.Items.Items[3].Enabled := true;
  end;
end;



procedure TMainForm.SelectAll1Click(Sender: TObject);
var
  i:longint;
begin
  for i := 1 to ListView.Items.Count do
    ListView.Items.Item[i-1].Selected := true;
end;

procedure TMainForm.Preferenses1Click(Sender: TObject);
begin
  ConfigForm.CheckBox1.Checked := ConfigForm.Pref.ComfirmPasswordOnCreate;
  ConfigForm.CheckBox2.Checked := ConfigForm.Pref.ConfirmDelete;
  if ConfigForm.ShowModal = mrOK then
  begin
    ConfigForm.Pref.ComfirmPasswordOnCreate := ConfigForm.CheckBox1.Checked;
    ConfigForm.Pref.ConfirmDelete := ConfigForm.CheckBox2.Checked;
    ConfigForm.SavePref;
  end;
end;

procedure TMainForm.About1Click(Sender: TObject);
begin
  AboutForm.ShowModal;
end;

procedure TMainForm.DropFiles(var DropFileMsg: TwmDropFiles);
var
  i, dropcount : integer;
  filename : array[0..500] of char;
  s:string;
begin
  if (DB = nil)then
  begin
  end else begin
    dropcount := dragqueryfile(DropFileMsg.drop,$ffffffff,nil,0);
    ProssessForm.OpenDialog1.Files.Clear;
    for i := 0 to dropcount-1 do
    begin
      dragqueryfile(DropFileMsg.drop,i,filename,500);
      ProssessForm.OpenDialog1.Files.Add( string(filename) );
    end;
    dragfinish(DropFileMsg.drop);
    Application.BringToFront;
    ProssessForm.AddFilesDrop(DB,false);
    UpdateList;
  end;
end;



procedure TMainForm.ListViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

end;

procedure TMainForm.ListViewStartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  DragObject
end;

end.
Avatar billede borrisholt Novice
18. oktober 2001 - 22:51 #14
DOWNLOAD lige det eksemple først .. Det er nemlig præcis DET du har brug for ...

Jens B
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:52 #15
Jeg HAR downloadet det!!!
Avatar billede borrisholt Novice
18. oktober 2001 - 22:53 #16
Og problemer et ?

Jens B?
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:55 #17
Er det drop text eller drop file tingen jeg skal bruge??
Avatar billede borrisholt Novice
18. oktober 2001 - 22:57 #18
TDropFileSource !! Kig i ExtractDemo .. Den viser dig hvordan du trækker fra dit program ud på Shellen ..

Jens B
Avatar billede antialize Nybegynder
18. oktober 2001 - 22:57 #19
Ok
Avatar billede antialize Nybegynder
18. oktober 2001 - 23:02 #20
Den kan ikke find du af det her

OKEffect := DROPEFFECT_NONE;
    if (CheckBoxCopy.Checked) then
      OKEffect := OKEffect OR DROPEFFECT_COPY;
    if (CheckBoxMove.Checked) then
      OKEffect := OKEffect OR DROPEFFECT_MOVE;
    if (CheckBoxLink.Checked) then
      OKEffect := OKEffect OR DROPEFFECT_LINK;  }

    Result := DoDragDrop(DropSource as IDataObject, DropSource as IDropSource,
      OKEffect, Effect);
Avatar billede antialize Nybegynder
18. oktober 2001 - 23:07 #21
Jeg kan ikke finde DoDragDrop nogle steder
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester