Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Übergabe von Daten an eine Callback-Funktion (https://www.delphipraxis.net/158827-uebergabe-von-daten-eine-callback-funktion.html)

marcibaer 4. Mär 2011 14:11

Übergabe von Daten an eine Callback-Funktion
 
Hallo zusammen.

Ich habe es mittels

http://stackoverflow.com/questions/2...he-highlighted

geschafft, dass der Ok-Button des Dialogs nur dann enabled ist, wenn in dem ausgewählten Verzeichnis
eine bestimmte Datei vorhanden ist.

Wie schaffe ich es nun aber, dies zu verallgemeinern - sprich, wie kann ich das Verhalten des
OK-Buttons von unterschiedlichen Dateien oder sogar einer vorgegeben Menge von Dateien abhängig machen!?

Was und wie muss ich der Callback-Funktion "BrowseCallbackProc" übergeben, damit ich den Dialog an verschiedenen Stellen benutzen kann?

Vielen Dank für Eure Hilfe!

himitsu 4. Mär 2011 14:14

AW: Übergabe von Daten an eine Callback-Funktion
 
Delphi-Quellcode:
if (ExtractFileName(DirName)='config') then
prüft einen Dateinamen, also hier einfach mit OR Mehrere prüfen
oder z.B. über eine TStringList und IndexOf in einer Liste nachsehn.

marcibaer 4. Mär 2011 14:58

AW: Übergabe von Daten an eine Callback-Funktion
 
Das ist mir grundsätzlich schon klar!

Ich will die Funktion "SelectFolderDialogExt" und somit ja auch "BrowseCallbackProc" von mehreren Stellen aus mit unterschiedlichen "Suchkriterien" aufrufen.

Hier der Ausschnitt aus meiner veränderten "BrowseCallbackProc":
Delphi-Quellcode:
    BFFM_SELCHANGED:
      begin
        pIDL := Pointer(lParam);
        if Assigned(PIDL) then
          begin
            SHGetPathFromIDList(pIDL, DirName);
            SendMessage(hwnd, BFFM_ENABLEOK, 0, Ord(FileExists(DirName+'\bblabla.txt'));
         end;
      end;
Mein Problem ist nun, wie übergebe ich den Dateinamen oder meinetwegen auch verallgemeinert eine TStringList an die Callback-Funktion, deren Paramer doch fest vorgegeben sind, oder!?
Also wie kriege ich
Delphi-Quellcode:
  SendMessage(hwnd, BFFM_ENABLEOK, 0, Ord(FileExists(DirName+'\'+Dateiname));
hin.

himitsu 4. Mär 2011 15:05

AW: Übergabe von Daten an eine Callback-Funktion
 
Dir ist bestimmt schon der lParam/lpParam-Parameter aufgefallen, worin mal den SelectedFolder übergibt?

Darüber kann man auch ein Objekt oder einen Record-Zeiger übergeben, worin nun der SelectedFolder und deine Dateinamen drin stecken.
(oder eben nur die Dateiliste und das SelectedFolder ausbauen)

marcibaer 4. Mär 2011 18:26

AW: Übergabe von Daten an eine Callback-Funktion
 
Das hab ich mir schon gedacht!

Aber wo lege ich die Parameter-Werte fest? Es gibt ja keinen direkten Funktionsaufruf.
Was ich nicht verstehe, ist: wo bekommen die Parameter der Callback-Funktion ihre Werte her,
also, wo werden die Werte
Delphi-Quellcode:
hwnd: HWND; MessageID: UINT; lParam: LPARAM; lpData: LPARAM
gesetzt/übergeben.

In der Struktur "TBrowseInfo" wird die Callback-Funktion zwar zugewiesen und es gibt auch ein lParam, aber das war's auch ...

Irgendwo müssen die Werte doch zugewiesen werden :cry:

himitsu 4. Mär 2011 18:40

AW: Übergabe von Daten an eine Callback-Funktion
 
Zitat:

Zitat von marcibaer (Beitrag 1085964)
In der Struktur "TBrowseInfo" wird die Callback-Funktion zwar zugewiesen und es gibt auch ein lParam, aber das war's auch ...

Irgendwo müssen die Werte doch zugewiesen werden :cry:

Da hast du doch schon die Stelle?
Der Wert von dem lParam wird als lpParam an die Prozedur übergeben.


PS: MSDN-Library durchsuchenSHBrowseForFolder ist immer einen Blick wert, denn dort steht fast alles Wichtige drin.

marcibaer 5. Mär 2011 13:01

AW: Übergabe von Daten an eine Callback-Funktion
 
Danke, klappt!

Mir war

Zitat:

lpData
Type: LPARAM

An application-defined value that was specified in the lParam member of the BROWSEINFO structure used in the call to SHBrowseForFolder.
entgangen.

Schon irgendwie seltam ... da wird aus lParam LpData ... da muss mal einer drauf kommen!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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