AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Übergabe von Daten an eine Callback-Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Übergabe von Daten an eine Callback-Funktion

Ein Thema von marcibaer · begonnen am 4. Mär 2011 · letzter Beitrag vom 5. Mär 2011
Antwort Antwort
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
76 Beiträge
 
Delphi XE2 Professional
 
#1

Übergabe von Daten an eine Callback-Funktion

  Alt 4. Mär 2011, 15:11
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!
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Übergabe von Daten an eine Callback-Funktion

  Alt 4. Mär 2011, 15:14
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.
$2B or not $2B
  Mit Zitat antworten Zitat
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
76 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Übergabe von Daten an eine Callback-Funktion

  Alt 4. Mär 2011, 15:58
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
  SendMessage(hwnd, BFFM_ENABLEOK, 0, Ord(FileExists(DirName+'\'+Dateiname)); hin.
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Übergabe von Daten an eine Callback-Funktion

  Alt 4. Mär 2011, 16:05
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)
$2B or not $2B
  Mit Zitat antworten Zitat
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
76 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Übergabe von Daten an eine Callback-Funktion

  Alt 4. Mär 2011, 19:26
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
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
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Übergabe von Daten an eine Callback-Funktion

  Alt 4. Mär 2011, 19:40
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
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.
$2B or not $2B
  Mit Zitat antworten Zitat
marcibaer

Registriert seit: 27. Sep 2006
Ort: Inden
76 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Übergabe von Daten an eine Callback-Funktion

  Alt 5. Mär 2011, 14:01
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!!
Marc
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:55 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