Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie Panel in dll ablegen und bei bedarf laden (https://www.delphipraxis.net/36112-wie-panel-dll-ablegen-und-bei-bedarf-laden.html)

jonny 15. Dez 2004 23:10


Wie Panel in dll ablegen und bei bedarf laden
 
Hallo,

Wie kann ich ein/mehrere Panel/s und die dazugehörige Anwendung erstellen so das man bei bedarf ein/mehrere Panel/s aus jeweils eigener DLL laden könnte und sie dann auf der Hauptanwendung anzeigen. Bei den Panels soll es sich um Panel mit Sichtbaren Elementen handeln die auch eigene Funktionen haben sollen. Also es müssen praktisch eigene Anwendungen sein die sich in der Anwendung eindocken.

Hat jemand einen Tipp?

supermuckl 15. Dez 2004 23:40

Re: Wie Panel in dll ablegen und bei bedarf laden
 
also ich würde das handle usw von der hostanwendung von dem parent, wo das panel nacher drauf soll, einer funktion in der dll übergeben und die baut dann alle elemente incl das panel auf das fremde parent auf

und weist den buttons usw die festgelegten events aus der dll zu usw

blos wie kommuniziert man dann von der dll zum hauptprogramm ?
ich müsste ja dann im hauptprogramm auch wiederum festgelegte events an die dll freigeben, die dann die dll benutzt, um irgendetwas auszulösen

--> plugin system

hab ich mich da jetzt vertan? oder gehts in die richtung ? :)

ich stehe in wenigen tagen genau vor dem gleichen problem..
ich habe ein panel das ich in einem plugin ausgelagert haben will (dll)
und die schnittstellen (events und proceduren usw) sollen fix und ausgemacht sein..

jonny 15. Dez 2004 23:56

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Ja das ist genau die richtung deke ich, soll eine Art Sidebar werden.

supermuckl 16. Dez 2004 00:28

Re: Wie Panel in dll ablegen und bei bedarf laden
 
also wenn du aus der hauptapp die aufbau procedur aus der dll aufrufst, die dann die buttons und so weiter zur laufzeit und "zu fuß" erstellt, müsste es funzen

ob man aber das nun selber coden muss, oder ob man sogar eine dfm da irgendwie rein kriegt, weis ich nicht :(

weil dann könnte man ja die delphi IDE nehmen und ne oberfläche machen, und die wird dann zur laufzeit erst mit der procedure der dll erstellt

jonny 21. Dez 2004 22:02

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Hmm irgendwie check ich nicht so ganz wie das Praktisch funktionieren soll.

Ich glaub da bin ich zu dumm, oder hat einer für mich etwas code oder ein Beispiel wie man soetwas lösen könnte.

St.Gro 21. Dez 2004 22:13

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Hallo!

Ein Package darf es nicht sein? Das würde sich doch eher anbieten, wenn ich mir da jetzt kein total falsches Bild von der Situation mache..

Grüße,
Steffen

jonny 21. Dez 2004 22:15

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Wie packege? was meinst du jetzt genau damit? es darf alles sein was funktioniert und das gewünschte ergebnis liefert.

St.Gro 21. Dez 2004 22:31

Re: Wie Panel in dll ablegen und bei bedarf laden
 
In packages kannst du problemlos Objekte ablegen und zur Laufzeit dynamisch laden. Im Prinzip ähnlich einer DLL, nur dass du damit recht unproblematisch deine Sache mit dem Panel lösen kannst.

Siehe z.B. hier oder hier

Wenn du beide Artikel durch hast, solltest du in der Lage sein, deine Idee zu lösen (bei Fragen schrei!)

jonny 23. Dez 2004 01:25

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Also im Prinzip würde ich schon sagen juhu ich habs gefunden nun ist das aber so das mein Englisch nicht ganz so toll ist, Ich würde wochen brauchen um die 2 Artikel zu verstehen. Gibt es nicht irgend ein Tut auf deutsch? kann man in den Pakages auch Proceduren ablegen die dan ausgeführt würden wenn ein entsprechender Button betätigt wird?


MfG Jonny

Albi 23. Dez 2004 07:27

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Hallo Jonny,

ein deutsche Tut dazu kenn ich nicht aber vielleicht hilft dir das ja ein wenig weiter.

Du erstellt deine Forms ganz normal und wenn du sie fertig hast (mit allen Proceduren, Buttons usw) gehst Du auf Datei|Neu --> Neues Package, dann gehst Du auf ADD wählst die Unit die in das Package rein sollen. Speichert das ganze und gehst dann in deinem Projekt auch Projekt|Option und gehst zum dem Reiter Package. Hier setzt du dann ganz und das Häckchen bei "Mit Laufzeitpackage ..." und schreibst dann ganz hinten einfach den Namen von deinem Package ran und kompilierst das ganze.

Dann kanst Du dein Anwendung ganz normal starten und die Daten kommen aus dem Package.

GuenterS 23. Dez 2004 07:59

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Das klingt ja ganz gut, nur wie kann ich zur Laufzeit sagen, so jetzt nehme bitte nicht nur package eins sondern zusätzlich noch package zwei? Ist das nicht schon fix codiert, welche packages zu einem Programm gehören?

jonny 23. Dez 2004 22:57

Re: Wie Panel in dll ablegen und bei bedarf laden
 
@ Guenter: das ist auch zur laufzeit möglich soviel habe ich schon aus edm tut verstanden.

Aber wie kann ich ein Form aus dem Package auf meiner Hauptanwendung als Panel darstellen. Also nicht als Form sondern als ein Panel mit Schalflächen usw. drauf?

St.Gro 24. Dez 2004 11:03

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Huhu,

du könntest z.B. das ganze Formular im Package mit CreateParented "in das Panel hineinerstellen" (Anstelle von TForm.create benutzt du TForm.createParented und übergibst das Handle von Deinem Panel).

Wenn du (wie in dem Tutorial von Zarko Gajic) mit einer execute-funktion arbeitest, erweitere sie um den parameter "handle: hwnd"
Code:
function execute(const p1,p2,p3: string; handle: hwnd): boolean;

Beim Aufruf übergibst du dann:
Code:
ExecF(sDisplaytext, sYes, sNo, panel.handle);
Und im Package selbst:
Code:
function execute(const p1,p2,p3: string; handle: hwnd): boolean;
begin
  fmTest := TfmTest.CreateParented(handle); //fmTest BorderStyle= bsNone, align=alClient
  fmTest.Show;
  ...
end;
Hoffe, ich konnte helfen!

jonny 24. Dez 2004 11:16

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Ich denke das wird mir weiterhelfen.

Vielen vielen Dank.

PS: Werde das mal nach weihnachten testen und dann melde ich mich wieder.

jonny 24. Dez 2004 15:26

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Warum wird bei mir keine Package.bpl erstellt?

jonny 26. Dez 2004 23:20

Re: Wie Panel in dll ablegen und bei bedarf laden
 
OK! das die BPL datei erstellt wird habe ich hinbekommen, habe jetzt ein anderes Problem: Die Form wird nicht geladen die anwendung verursacht aber eine hohe CPU-Ausslastung.

Hier mein Code

Die hauptanwendung:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
 phm: HModule;
 ExecF: procedure (handle: hwnd);
begin
 {suppose package is in application's directory}
 phm:=LoadPackage(ExtractFilePath(ParamStr(0)) + 'TestPack.bpl');
 if phm <> 0 then
 try
   @ExecF:=GetProcAddress(phm, 'Execute');
   if Assigned(ExecF) then begin
     ExecF(Panel1.Handle);
   end else begin
     ShowMessage ('Execute routine not found!');
   end{if assigned}
 finally
   UnloadPackage(phm);
 end {try/finally}
 else {if hpm<>0}
   ShowMessage ('Package not found');
end;
Die Panel-Form:
Code:
procedure Execute(handle: hwnd);
begin
  Form1:= TForm1.CreateParented(handle);
  Form1.BorderStyle:=bsNone;
  Form1.Align:=alClient;
  Form1.Show;
end;

exports
  {Win32 export names are case sensitive!}
  Execute;
Hat jemand nen Tipp?

jonny 29. Dez 2004 22:14

Re: Wie Panel in dll ablegen und bei bedarf laden
 
So habe nun eine Procedure geschrieben die das Laden des Plugins übernehmen soll

hier der Quellcode:

Code:
procedure TForm1.LoadPlugin(PluginPath: String);
var phm: HModule;
    LoadP: procedure (Handle: hwnd);
    NewPanel: TPanel;
begin
  phm:=LoadPackage(PluginPath);
  If phm <> 0 Then
  try
    @LoadP:=GetProcAddress(phm, 'LoadMe');
    If Assigned(LoadP) Then
    begin
      NewPanel:=TPanel.Create(Form1);
      NewPanel.Align:=alTop;
      NewPanel.BevelInner:=bvNone;
      NewPanel.BevelOuter:=bvNone;
      NewPanel.Height:=100;
      NewPanel.Visible:=True;
      LoadP(NewPanel.Handle);
    end
    else
    begin
      ShowMessage ('"LoadMe"-Prozedur nicht gefunden');
    end
  finally
    UnloadPackage(phm);
  end
  else
    ShowMessage ('Plugin nicht gefunden');
end;
die Plugin-Unit sieht so aus:

Code:
...
procedure LoadMe(Handle: hwnd);
begin
  Form1:=TForm1.CreateParented(Handle);
  Form1.Align:=alClient;
  Form1.Show;
end;

procedure GetMeFree;
begin
  Form1.Release;
end;


exports
  LoadMe,
  GetMeFree;
end.
- So habe folgende Probleme Das Panel wird nicht erstellt (Bekomme ne Meldung das kein Parent an das Plugin übergeben wurde)
- erstelle ich zur entwurfzeit ein Panel und weise dem Plugin die als Paren zu so wird das Plugin dennoch nicht geladen (ausser einmal hats geklappt)
- Bei dem einen Mal wo es funktioniert hatte zeigte es sich aber nicht so wie erwünscht:
--eigener Taskbutton in der Taskleiste für das Plugin der aber störend ist
--da die Eigenschaft "Align" des Fensters auf "alClient" stand so bozog sich diese nicht auf das Panel sondern auf den Ganzen Bildschirm (Im Panel wurde also nur ein Teil der Form angezeigt)
--Jegliche Funktion der Anwendung war verschwunden noch nicht mal das beenden der Anwendung war möglich.

Kann mir jemand bei dem Problem helfen?

Die Anwendung die ich erstellen möcht soll so eine Art Sidebar werden wie die SmartBarXP oder die DesktopSidebar, wenn jemand die Anwendungen kennt so weiss er bestimmt was ich mit den Panels meine. Wenn jemand die Anwendungen nicht kennt so bin ich bereit ein Screenshot hier zu posten.

Danke schon mal für bisherige und folgende Hilfe.

St.Gro 30. Dez 2004 00:25

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Hallo!

Zitat:

Das Panel wird nicht erstellt (Bekomme ne Meldung das kein Parent an das Plugin übergeben wurde)
Du brauchst noch:

Code:
NewPanel.parent := self;
NewPanel.name := 'Panel1';
Zitat:

eigener Taskbutton in der Taskleiste für das Plugin der aber störend ist
Verschwindet damit:

Code:
form.borderstyle := bsNone;
Und du musst das Package später freigeben, nicht unmittelbar nach der Erstellung.
Bei deinem Code läuft es in einem durch:

Code:
try
  <Erstellung...>
finally
  UnloadPackage(phm);
end
Kommentier die Zeile UnloadPackage mal aus..Setz sie z.B. im onClose vom Formular wieder ein.

Zitat:

Im Panel wurde also nur ein Teil der Form angezeigt
Das ist vermutlich wahr..alClient ist natürlich blödsinn, wenn du das Formular in ein Panel "hineinerstellst", passt es sich in der Größe dem Panel an und es erscheinen natürlich keine Scrollbars.
Erstelle es statt dessen in eine TScrollBox. Blöderweise musst du hierfür noch nach der Erstellung die Höhe des Scrollbars dem erstellten Formular anpassen, in etwa so wird es vermutlich funktionieren:

Code:
procedure LoadMe(Handle: hwnd; var fHeight: integer);
begin
  fmTest:=TfmTest.CreateParented(Handle);
  fmTest.Align := alNone;
  fmTest.SetBounds(10,10,400,400);
  fHeight := fmTest.top + fmTest.height;
...
entsprechend beim Aufruf:

Code:
procedure TForm1.LoadPlugin(PluginPath: String);
var phm: HModule;
    LoadP: procedure (Handle: hwnd; var fHeight: integer);
    NewScrollBox: TScrollBox;
    fHeight: integer;
begin
  phm:=LoadPackage(PluginPath);
  If phm <> 0 Then
  try
    @LoadP:=GetProcAddress(phm, 'LoadMe');
    If Assigned(LoadP) Then
    begin
      NewScrollBox:=TScrollBox.Create(Form1);
      NewScrollBox.parent := self;
      NewScrollBox.name := 'ScrollBox1';
      NewScrollBox.Align:=alTop;
      NewScrollBox.Height:=100;
      LoadP(NewScrollBox.Handle, fHeight);
      NewScrollBox.VertScrollBar.Range := fHeight;
...

Sollte deine Probleme alle abdecken, ich gehe nun ins Bett. Vielleicht dann bis später,

Steffen

jonny 30. Dez 2004 10:01

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Funktioniert schon besser nur noch folgendes:

1) der TaskButton für das Plugin in der Taskbar ist trotz

Code:
borderstyle := bsNone
noch da.

2) wenn ich UnloadPackage in z.B. OnClose ereigniss einsetze so muss ich ja die Variable phm: hModule global machen d.h. ich kann nur ein Plugin laden. (Es sollen mehrere Plugins geladen werden können)

3) Beim beenden des Programm trit ein Runtime-Error auf.

MrKnogge 30. Dez 2004 10:12

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Zu 2.

Nimm doch einfach ein dynamisches array :wink:

St.Gro 30. Dez 2004 10:42

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Zitat:

Beim beenden des Programm trit ein Runtime-Error auf.
Ich hatte gedacht, es reicht, das Panel freizugeben, das reicht aber scheinbar nicht.
Du musst noch eine unload Prozedur mit ins Package übernehmen:

Code:
procedure UnloadMe;
begin
  fmTest.free
end;
und diese im FormClose Event aufrufen, dann kommen auch keine Fehler mehr beim Programmende:

Code:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  UnloadProc: procedure;
begin
  @UnloadProc:=GetProcAddress(phm, 'UnloadMe');
    if Assigned(UnloadProc) then
      UnloadProc;
Alternativ würde es sich anbieten, einen Verweis auf das Formular im Package der Hauptanwendung zu übergeben (Das geht mit Packages im Gegensatz zu DLLs), dann kannst du ja auch so free aufrufen.

Zitat:

wenn ich UnloadPackage in z.B. OnClose ereigniss einsetze so muss ich ja die Variable phm: hModule global machen d.h. ich kann nur ein Plugin laden. (Es sollen mehrere Plugins geladen werden können)
Nun, du denkst aber schon noch selber mit? z.B. die Idee von MrKnogge würde sich mir da auch als erstes aufdrängen.

Mit der Taskleiste, das kann ich nicht reproduzieren. Bei mir erscheint weder in der Taskleiste noch in der Prozessübersicht ein Eintrag vom geladenen Modul (Wie es auch sein sollte).
Schick mir doch mal bitte deinen Code.

jonny 30. Dez 2004 11:57

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja das mit einem Dynamischen Array hatte ich mir auch schon überlegt, ich dachte nur das es vielleicht eine bessere möglichkeit geben könnte.

Den Quellcode füge ich hier als anhang an.

Danke für eure Hilfe.

jonny 30. Dez 2004 21:03

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Und noch ne Frage wie kann ich dann aus dem Plugin heraus eine Procedure/Function aufrufen die in der Hauptanwendung deklariert ist? Geht das überhaupt?

jonny 3. Jan 2005 21:32

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Keiner Ne Idee????

jonny 4. Jan 2005 22:15

Re: Wie Panel in dll ablegen und bei bedarf laden
 
So habe jetzt ein Dyn. Array für die Hadles für die Plugins eingebaut und schon bekomme ich kurz nach dem das Plugin geladen wird und ich die hauptanwendung anklicke eine Zugrifsverletzung?

hier Mein Quellcode:
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus, ElImgFrm;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    popupmenuClose: TMenuItem;
    N1: TMenuItem;
    popupmenuLoadPlugin: TMenuItem;
    opendlgPlugin: TOpenDialog;
    ElImageForm1: TElImageForm;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure popupmenuCloseClick(Sender: TObject);
    procedure popupmenuLoadPluginClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure LoadPlugin(PluginPath: String);
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type TPluginModule = Record
  Name: String;
  pih: HModule;
end;

var
  Form1: TForm1;
  Plugins: Array of TPluginModule;
implementation

{$R *.dfm}

procedure TForm1.LoadPlugin(PluginPath: String);
var phm: HModule;
    LoadP: procedure (Handle: hwnd; var fHeight: integer);
    NewScrollBox: TScrollBox;
    fHeight: integer;
begin
  phm:=LoadPackage(PluginPath);
  If phm <> 0 Then
  try
    @LoadP:=GetProcAddress(phm, 'LoadMe');
    If Assigned(LoadP) Then
    begin
      NewScrollBox:=TScrollBox.Create(Form1);
      NewScrollBox.parent:=self;
      NewScrollBox.Align:=alTop;
      NewScrollBox.Height:=100;
      LoadP(NewScrollBox.Handle, fHeight);
      NewScrollBox.Height := fHeight;

      SetLength(Plugins, Length(Plugins) + 1);
      Plugins[Length(Plugins)].Name:='';
      Plugins[Length(Plugins)].pih:=phm;
    end
    else
    begin
      ShowMessage ('"LoadMe"-Prozedur nicht gefunden');
    end
  finally
//    UnloadPackage(phm);
  end
  else
    ShowMessage ('Plugin nicht gefunden');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  UnloadProc: procedure;
  I: Integer;
begin
  If Length(Plugins) > 0 Then
  begin
    For I:=0 To Length(Plugins) Do
    begin
      If Plugins[I].pih <> 0 Then
      begin
        @UnloadProc:=GetProcAddress(Plugins[I].pih, 'GetMeFree');
        If Assigned(UnloadProc) Then
          UnloadProc;
        end;
    end;
  end;
end;

procedure TForm1.popupmenuCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.popupmenuLoadPluginClick(Sender: TObject);
begin
  If opendlgPlugin.Execute Then
  begin
    LoadPlugin(opendlgPlugin.FileName);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(Plugins, 0);
end;

end.
Hat jemand ne Idee woran das liegen könnte?

jonny 7. Jan 2005 06:09

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Hat denn keiner ne Idee?

Bitte helft mir!

Boombuler 7. Jan 2005 07:12

Re: Wie Panel in dll ablegen und bei bedarf laden
 
was sagt denn dein Debugger dazu?


Greetz
Boombuler

(Ich hab das ganze mal mit ner DLL probiert ich bekomm immer beim CreateParented n fehler! -> Zugriffsverletzung)

jonny 7. Jan 2005 07:20

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Mein Debugger sagt garnichts das ist das Problem es kommt einfach ne MessegeBox wo steht Shutzverletzung blabla bla und ein Fenster in dem Assembler Befehle Stehen das wars.

Boombuler 7. Jan 2005 15:12

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Bei welchem Befehl denn? (das wird dein Debugger ja wohl sagen^^)

Greetz
Boombuler

jonny 9. Jan 2005 12:52

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Das ist es ja das es bei keinem Befehl ist. der Debuger zeigt nichts an, garnichts!

jonny 10. Jan 2005 13:13

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Kann mir jemand was zur der komponente JvPluginManager sagen?

Boombuler 10. Jan 2005 13:44

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Ich hab mich gerad noch mal durchs I-Net gewühlt und ich wollt nur sagen "CreateParented" ist definitiv NICHT für diese Zwecke zu gebrauchen!

Greetz
Boombuler

St.Gro 11. Jan 2005 14:49

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Zitat:

So habe jetzt ein Dyn. Array für die Hadles für die Plugins eingebaut und schon bekomme ich kurz nach dem das Plugin geladen wird und ich die hauptanwendung anklicke eine Zugrifsverletzung?
Mach doch bitte aus dem Code..
Code:
SetLength(Plugins, Length(Plugins) + 1);
      Plugins[Length(Plugins)].Name:='';
      Plugins[Length(Plugins)].pih:=phm;
..mal diesen:
Code:
SetLength(Plugins, Length(Plugins) + 1);
      Plugins[Length(Plugins)-1].Name:='';
      Plugins[Length(Plugins)-1].pih:=phm;
beim OnClose natürlich auch nicht i := 0 to length(plugins), sondern i:= 0 to length(plugins)-1

Zitat:

Ich hab mich gerad noch mal durchs I-Net gewühlt und ich wollt nur sagen "CreateParented" ist definitiv NICHT für diese Zwecke zu gebrauchen!
So, warum nicht?

Boombuler 11. Jan 2005 15:10

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Zitat:

Zitat von St.Gro
Zitat:

Ich hab mich gerad noch mal durchs I-Net gewühlt und ich wollt nur sagen "CreateParented" ist definitiv NICHT für diese Zwecke zu gebrauchen!
So, warum nicht?

Würd ich dir gerne sagen wenn ich den link noch hätte...

St.Gro 11. Jan 2005 16:58

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Zitat:

Würd ich dir gerne sagen wenn ich den link noch hätte...
Warum versuchst du es nicht in deinen Worten? :idea:

Boombuler 12. Jan 2005 06:36

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Weil ich nich mehr weiß warum sondern nur noch DAS... ich glaub das war irgendwo bei der Google Group Search...

Greetz
Boombuler

(evtl. Taugt das ja auch! Ich weiß ja net wie zuverlässig diese Quelle war)

St.Gro 12. Jan 2005 12:23

Re: Wie Panel in dll ablegen und bei bedarf laden
 
Du wirst es vielleicht nicht für möglich halten, aber ich empfehle im Normalfall nur Dinge, von denen ich weiss, dass sie "taugen". In diesem Falle weiss ich es, weil ich es schon mehrfach so gemacht habe und es eine flexible Lösung ist - Deshalb würde ich mich natürlich gerne belehren lassen, warum das "definitiv NICHT für diese Zwecke zu gebrauchen" ist.

Naja, wollen wir mal das Thema im Auge behalten bzw nicht zweckentfremden, wenn es ausgesessen ist.

Grüße,
Steffen


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