AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Drag / Drop Tutorial

Ein Thema von haentschman · begonnen am 1. Jan 2008 · letzter Beitrag vom 3. Jan 2008
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.362 Beiträge
 
Delphi 12 Athens
 
#26

Re: Drag / Drop Tutorial

  Alt 3. Jan 2008, 11:07
nja, mehr in etwa so:

aber hierbei ist mir aufgefallen (mach zu selten was mit WidowsMessages), das SendNotifyMessage im selben thread garnich sofort zurückkehrt und och 'ne Mißhandlung von SendMessageCallback lief nicht wie geplant

wie sendet man blos 'ne Message innerhalb des selben treads, so daß diese an die Nachrichtenlist angehängt wird?


Delphi-Quellcode:
const WM_NEWMESSAGE = WM_USER + 100; {oder so
weiß gad nicht in welchem Bereich die IDs sein müssen, aber dazu steht bestimmt irgendwo was}


type
  TJvFileListBox = class(TForm)
  private
    ListeDateien: TStringList;
    procedure DropFiles (var Msg: TMessage); message WM_DROPFILES;
    procedure NewMessage(var Msg: TMessage); message WM_NEWMESSAGE;
  end;

procedure TJvFileListBox.DropFiles(var Msg: TMessage);
// nur Dateien merken und zurück
var
  i, Anzahl, Size: integer;
  Dateiname: String;
begin
  if ListeDateien = nil then ListeDateien := TStringList.Create
  else ListeDateien.Clear;
  Anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
  for i := 0 to (Anzahl - 1) do
    begin
      Size := DragQueryFile(Msg.WParam, i, nil, 0);
      SetLength(Dateiname, Size);
      DragQueryFile(Msg.WParam, i, PChar(Dateiname), Size + 1);
      ListeDateien.Add(Dateiname);
    end;
  DragFinish(Msg.WParam);
  PostMessage(Handle, WM_NEWMESSAGE, 0, 0);
end;

procedure TJvFileListBox.NewMessage(var Msg: TMessage);
var
  i: integer;
begin
  if ListeDateien = nil then exit;
  SetForegroundWindow(FAnlagenkomponenten.Handle);
  if BestatigungK and (MessageDlg('Kopieren von ' + IntToStr(ListeDateien.Count) + ' Dateien nach '
    + FAnlagenkomponenten.DocVerzeichnis.Text + ' ?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
    begin
      exit;
    end;
  for i := 0 to ListeDateien.Count - 1 do
    begin
      CopyFile(PChar(ListeDateien.Strings[i]), PChar(FAnlagenkomponenten.DocVerzeichnis.Text
        + '\' + ExtractFilePath(ListeDateien.Strings[i])), false);
    end;
  FAnlagenkomponenten.JvFileListBox1.Update;
  FreeAndNil(ListeDateien);
end;

// und nicht im Destructor dieses vergessen
// if ListeDateien <> nil then ListeDateien.Free;
[add]
ok, mit PostMessage scheint's zu gehn
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz