Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Probleme beim erstellen eines Listitems (https://www.delphipraxis.net/84507-probleme-beim-erstellen-eines-listitems.html)

thomasdrewermann 17. Jan 2007 20:05


Probleme beim erstellen eines Listitems
 
Hallo,
ich bin gerade dabei zu verzweifeln. Ich habe Google schon leergegoogelt und bin immer noch nicht schlauer. Ich habe mit dem Nachfolgenden Code die Möglichkeit geschaffen, auf das Droppen eines Files auf ein bestimmtes Panel zu reagieren.
Nach dem Droppen des Files soll das Programm einen Eintrag in einen Listview machen, der sich auf dem selben Formular befindet wie das Panel, auf das ich das File fallen lasse.
Es existiert ein 2. Formular, auf dem sich ein ICON-Chooser und 2 Edit felder befinden. Dort ist allerdings nichts weiter programmiert. Beide Formulare werde beim Start erzeugt. Beim klick auf das Panel funktioniert das Anlegen eines Items. Wird die selbe Funktion wie oben beschrieben durch das Droppen ausgelöst kommt eine Schutzverletzung. Habe nun schon die Prozedur in den Public-Abschnitt geschoben, weil ich dachte, dass es daran liegt. Ohne Wirkung.

Weiss jemand worans liegt?

Gruß
THomas

Delphi-Quellcode:
unit Applet1Form;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, Buttons, shellapi, checklst,IconDialog,
  ChangeIcDialog, IconCtls, controlpanel;

type
  TPanel = class(ExtCtrls.TPanel)
  private
    procedure FWM_DropFiles(var Msg: TMessage); message WM_DROPFILES;
  end;

type
  TfmApplet1 = class(TForm)
    btnOK: TButton;
    btnCancel: TButton;
    btnApply: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    Label1: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    prgpfad: TMemo;
    prgname: TMemo;
    Label2: TLabel;
    Label3: TLabel;
    prgicon: TPaintBox;
    CheckListBox1: TCheckListBox;
    ListView2: TListView;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Label4: TLabel;
    ListBox1: TListBox;
    Image2: TImage;
    ComboBox1: TComboBox;
    Label5: TLabel;
    Label6: TLabel;
    Edit1: TEdit;
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
     item:TListItem;
    procedure addicon(name,pfad,param:string; icon:integer);
  end;

var
  fmApplet1: TfmApplet1;

implementation

uses Unit1;

{$R *.DFM}

procedure TfmApplet1.addicon(name,pfad,param:string; icon:integer);
 
begin
item:=self.listview1.items.add;
item.Caption:=name;
item.SubItems.Add(pfad);
item.subitems.add(param);
item.SubItems.add(inttostr(icon));
end;

procedure TPanel.FWM_DropFiles(var Msg: TMessage);
var i, anzahl, size: integer;
    Dateiname: String;
begin
  inherited;
  Dateiname := '';
  anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
  for i := 0 to (anzahl - 1) do
  begin
    size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
    SetLength(Dateiname, size);
    SetLength(Dateiname, DragQueryFile(Msg.WParam,i , @Dateiname[1], size));
    //hier dein source - in "Dateiname" ist der name des droped objectes
    if (ExtractFileExt(dateiname)='.exe') or (ExtractFileExt(dateiname)='.com') then
      begin

        form1.dfsIconComboBox1.FileName:=dateiname;
        form1.dfsIconComboBox1.enabled:=true;
        if form1.showmodal=mrok then
          begin
           fmApplet1.addicon(form1.edit1.text,dateiname,form1.edit2.text,form1.dfsiconcombobox1.itemindex);
          end;
      end;
  end;
  DragFinish(Msg.WParam);
end;

procedure TfmApplet1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(panel1.handle, True);
panel1.Hint:='Hierhin muss die Anwendung gezogen werden, die eingerichtet'+chr(13)+'werden soll. Eine Verknüpfung funktioniert NICHT!';
end;

procedure TfmApplet1.BitBtn1Click(Sender: TObject);
begin
  if listview1.SelCount>0 then
    begin
      Messagebox(self.handle,pchar('Sind sie sicher, dass Sie das Programm '+listview1.selected.caption+' löschen wollen?'),'Frage',32);
      listview1.Selected.Delete;
    end else
    begin
      Messagebox(self.handle,'Es ist kein Programm gewählt!','Fehler',16);
    end;
end;




procedure TfmApplet1.Panel1Click(Sender: TObject);
begin
addicon('TEST','TEST','test',2);
end;

end.

thomasdrewermann 17. Jan 2007 20:39

Re: Probleme beim erstellen eines Listitems
 
Hi,
mit der ändernung des aufrufs auf
Delphi-Quellcode:
self.click();
und dem Befehl im OnClick-Ereignis des Panels funktioniert es.

Aber wie übergebe ich nun die Parameter?

mkinzler 17. Jan 2007 20:41

Re: Probleme beim erstellen eines Listitems
 
Welche Parameter

Christian Seehase 17. Jan 2007 20:42

Re: Probleme beim erstellen eines Listitems
 
Moin Thomas,

also bei mir funktioniert das auch so.
Setz' doch mal auf die markanten Stellen einen Breakpoint, um festzustellen, wodurch die AV ausgelöst wird.
Irgendetwas scheint da nicht zu existieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz