07. januar 2012 - 21:28Der er
5 kommentarer og 1 løsning
Drop filer på form Delphi XE2
Med denne kode kan jeg droppe en eller flere filer på en form, hvis jeg compiler med Delphi 2006. Hvis jeg benytter Delphi XE2 virker det ikke. Er der nogen der har en forklaring og en løsning?
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
constructor TFileCatcher.Create(DropHandle: HDROP); begin inherited Create; fDropHandle := DropHandle; end;
destructor TFileCatcher.Destroy; begin DragFinish(fDropHandle); inherited; end;
function TFileCatcher.GetFile(Idx: Integer): string; var FileNameLength: Integer; begin FileNameLength := DragQueryFile(fDropHandle, Idx, nil, 0); SetLength(Result, FileNameLength); DragQueryFile(fDropHandle, Idx, PChar(Result), FileNameLength + 1); end;
function TFileCatcher.GetFileCount: Integer; begin Result := DragQueryFile(fDropHandle, $FFFFFFFF, nil, 0); end;
function TFileCatcher.GetPoint: TPoint; begin DragQueryPoint(fDropHandle, Result); end;
procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Form1.Handle, True); end;
procedure TForm1.FormDestroy(Sender: TObject); begin DragAcceptFiles(Self.Handle, False); end;
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles); // Handle WM_DROPFILES message var I: Integer; // loops thru all dropped files DropPoint: TPoint; // point where files dropped Catcher: TFileCatcher; // file catcher class begin inherited; // Create file catcher object to hide all messy details Catcher := TFileCatcher.Create(Msg.Drop); try
for I := 0 to Pred(Catcher.FileCount) do showmessage(Catcher.Files[I]); // Get drop point DropPoint := Catcher.DropPoint; finally Catcher.Free; end; // Notify Windows we handled message Msg.Result := 0; end;
Så fandt jeg ud af det ved lidt læsning på nettet.
Jeg havde sat min delphi til at starte med administratorrettigheder. Det får den betydning, at f.eks. WMDropFiles ikke fungerer, når programmet afvikles fra delphi. Det fungerer dog fint, når programmet startet direkte fra exe-filen.
Grunden til at jeg havde sat Delphi til at starte med adminrettigheder er at jeg ellers ikke kunne compilere et af mine store programmer. Det er lidt underligt, så det skal jeg så også have fundet ud af. Programmet er begyndt at kræve at blive startet som administrator, dog kun når det afvikles fra min PC og ikke på en anden??????
Det er ikke så længe siden jeg købte XE2, og har måtte bruge lidt tid på at få et af mine store programmer flyttet over fra Delphi 2006. Det skyldes til dels at jeg har benyttet et par 3party-components, som ikke understøttede XE2.
Grunden til at jeg skiftede, er bla. at der nu er mulighed for at skrive programmer til Windows, Mac og Ipad/IPhone med det nye Firemonkey IDE, som følger med. Det kan gøres mere eller mindre ud fra den samme Delphi/Pascal-kode. Det ser rigtig spændende ud. Det er også rigtig nemt at scalere sit program til forskellige størrelse skærme med Firemonkey.
Selve Delphi XE2 ligner meget sig selv. Jeg har dog ikke helt styr på hvad der ellers er kommet til, men har da opdaget et par smarte funktioner. Bare en ting som at properties i Objektinspektor nu står i alfabetisk orden, hvor det i 2006 hvor jeg kom fra stod i logisk i grupper, men alligevel gjorde det temmlig uoverskueligt. Det var jeg rigtig træt af.
Der er desuden understøttelse af diverse grafiske formater, som jeg har brug for, uden brug af ekstern kode og komponenter.
Jeg kører Win7 64bit. Mht. Firemonkey og programmering til MacOS go iOs er man dog nødt til at have en Mac der køre et program XCode, som compilerer programmet. Man skal forbinde Mac op PC f.eks. via LAN og have en delt mappe. Man skal fra starten vælge om det skal være til Windows/Mac OSx eller iOS til iPad/iPhone.
Man programmerer som normalt i Delphi og kan selvfølgelig compilere til en exe på PC'en, man kan så sende coden til Mac'en, hvor det bliver compileret til Mac mm.
Man kan vist godt sætte sin PC op så den kører MacOS virtuelt, eller omvendt.
Der er forskel på Firemonkeycomponenter og normale VCL komponenter og de kan ikke benyttes på det modsatte system. Der er mange componenter der umiddelbart fungerer, som de plejer, men også nogen der er nye og anderledes. Og så mangler der sikkert også nogen man plejer ar bruge. Der er selvfølgelig heller ikke så mange 3.partskomponenter endnu. Firemonkey er vist først kommet med her i XE2 og mon ikke den vil udvikle sig med tiden. Delphikoden ligner sig selv, men der er selvfølgelig nogen forskelle, da man ikke benytter de sædvanlige windowsunits under uses. Ja spændende ser det ud og en del der skal læres.
Tak for yderligere info. Det er noget der skal prøves ! Jeg kunne nu godt tænke mig at købe fra en $-side fremfor samme beløbsstørrelse i Euro :-( ? ?
Synes godt om
Ny brugerNybegynder
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.