Um auf Blup's Post separat zu antworten:
1) Ich übergebe keine Strings. Auch keine WideStrings (auch wenn ich das hier das erste mal lese, aber ist logisch), sondern ich verwende PChar-typen. Das wird ja an unterschiedlichen Stellen so empfohlen, nicht zuletzt im Text des Code-Wizards:
Zitat:
Übergeben Sie String-Informationen mit PChar- oder ShortString-Parametern, um die Verwendung von BORLNDMM.DLL zu vermeiden.
2) DAS ist in der Tat interssant und eine komplette Neuheit für mich. ICh hab mich mit dem Thema
TForms in DLLs schon einige Zeit befasst, aber DAS hab ich noch nirgends gelesen. Das sollte per se ja auch nicht das Thema sein, das einzubauen, ich hab ja einen "Konstruktor" in der
DLL (ist nix anderes als eine Prozedur namens "CreateSearch"). Da hau ich den neuen Parameter mit rein, guter Punkt! Ist das aber dann nachher auch des Rätsels Lösung?
3) Ob du es glaubst oder nicht, es IST eine lokale Variable. Ich poste mal den gesamten Code:
Delphi-Quellcode:
procedure TFormDynamicSearchDialog.LoadIni;
var
iniFile: TIniFile;
sec:
String;
begin
if FIniFile <> '
'
then
begin
sec := '
Search';
iniFile :=
nil;
try
iniFile := TIniFile.Create(FIniFile);
miSqlLinkCmdAnd.Checked := iniFile.ReadBool(sec, miSqlLinkCmdAnd.
Name, true);
miSqlLinkCmdOr.Checked := iniFile.ReadBool(sec, miSqlLinkCmdOr.
Name, false);
if miSqlLinkCmdAnd.Checked
then
FSqlLinkCmd := slcAnd
else if miSqlLinkCmdOr.Checked
then
FSqlLinkCmd := slcOr;
case iniFile.ReadInteger(sec, pcMain.
Name, 1)
of
0: tbFavourites.Click;
1: tbExpert.Click;
2: tbFavourites.Click;
end;
finally
if iniFile <>
nil then
iniFile.Free;
end;
end else
begin
// if no INI has been defined, set SQL link command as default here
miSqlLinkCmdAND.Checked := true;
FSqlLinkCmd := slcAnd;
end;
end;
Und bei dem "ShowModal" sollte man sich nicht verwirren lassen
Das muss ich aber glaub genauer erklären. Im Interface zur
Dll (
Unit-Name "DynamicSearchDialogDllInterface") gibt es eine Methode, die "ShowModal" heißt. Diese wiederum ruft die aus der
DLL exportierte Methode "ShowModal" auf (
Unit-Name "DynSearchDialog"). Und in dieser Methode wird dann das tatsächliche "ShowModal" des TForm-Objekts aufgerufen (
Unit-Name "DynamicSearchDialog"). D.h.
ShowModal wird tatsächlich nur einmal aufgerufen, allerdings gibt es davor noch andere Methoden, die halt exakt so heißen. Hat was mit der Integration zu tun, ich wollte halt nicht, dass alle Entwickler ihren Code anpassen müssen, wenn sie auf die
DLL umsteigen wollen; oder zumindest nur ganz gering anpassen müssen