// Im folgenden wird je nach Auswahl von "sprache" die eine oder die andere
// DLL dynamisch geladen und wieder freigegeben.


// Getestet mit D4 unter WinME

// zuerst werden die zwei DLLs erzeugt: 
// --------------------------------------------------------------- 
 
library deutsch; 
 
type 
  stringarray = array[0..3] of Shortstring; 
 
function stringsausgeben: stringarray; 
begin 
  result[0] := '&Ja'; 
  result[1] := '&Nein'; 
  result[2] := '&Abbrechen'; 
  result[3] := 'deutsch'; 
end; 
 
exports stringsausgeben; 
 
begin 
end. 
 
// ---------------------------------------------------------------- 
 
library english; 
 
type 
  stringarray = array[0..3] of Shortstring; 
 
function stringsausgeben: stringarray; 
begin 
  result[0] := '&Yes'; 
  result[1] := '&No'; 
  result[2] := '&Cancel'; 
  result[3] := 'english'; 
end; 
 
exports stringsausgeben; 
 
begin 
end. 
// Hinweis: Die uses-Anweisung in der DLL wurde erst nach dem Abspeichern 
// entfert, dann nochmal gespeichert und danach die DLL erzeugt. 
// Man kann sie auch drin lassen, dann wird aber die DLL größer. 
 
// --------------------------------------------------------------- 
// Und so kann man beispielsweise das Ganze im Programm aufrufen: 
 
type 
  spr = (deutsch, english); 
  stringarray = array[0..3] of Shortstring; 
  TBeschriftung = function: stringarray;   
const 
  sprache: spr = deutsch;   
var 
  HLIB: THandle; 
  Zeiger: TFarProc; 
 
function CaptionsSetzen(kompo: array of TComponent): boolean; 
var 
  beschriftung: TBeschriftung; 
  x: integer; 
begin 
  case sprache of 
    deutsch: HLIB := LoadLibrary('deutsch.dll'); 
    english: HLIB := LoadLibrary('english.dll'); 
  end; 
  zeiger := GetProcAddress(HLIB, 'stringsausgeben'); 
  if zeiger <> nil then begin 
    @beschriftung := zeiger; 
    for x := 0 to high(kompo) do 
      if kompo[x] is TLabel then 
        TLabel(kompo[x]).caption := beschriftung[x] 
      else if kompo[x] is TButton then 
        TButton(kompo[x]).caption := beschriftung[x]; 
    result := true; 
  end else result := false; 
  freeLibrary(HLIB); 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  CaptionsSetzen([Button1, Button2, Button3, Label1]); 
end; 
 
// DLLs wechseln 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if not CaptionsSetzen([Button1, Button2, Button3, Label1]) 
    then showmessage('Fehler'); 
  if sprache = deutsch then sprache := english else sprache := deutsch; 
end; 


Zugriffe seit 6.9.2001 auf Delphi-Ecke