Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: DFM-Datei in anderem Programm als Vorschau anzeigen

  Alt 23. Jul 2015, 21:02
Erfreulicherweise habe ich doch noch eine Möglichkeit gefunden, das Objekt in mein Formular zu übernehmen, mit CreateParented geht es:

Delphi-Quellcode:
function GetWinControlFromClass (ClassName: ShortString; InStream: TMemoryStream; AnOwner: TControl): TControl; stdcall;
var
  CRef: TPersistentClass;
  AControl: TControl;
  pn: TPanel;
begin
  Result := NIL;

  pn := Tpanel.CreateParented(TWinControl(AnOwner).handle); // That Rocks !!

  CRef := GetClass(String (ClassName));
  if CRef<>nil then
  begin
    AControl := TControl(TControlClass(CRef).Create(AnOwner));
    try

      AControl.Parent := pn;
      ReadComponent (AControl, Instream);
      //AControl.Parent := pn;

      pn.BevelOuter := bvNone;

      pn.Left := TWinControl (AControl).Left;
      pn.Top := TWinControl (AControl).Top;

      AControl.Left := 0;
      AControl.Top := 0;

      if ObjectHasProp (AControl, 'Width', tkInteger) then begin
        pn.AutoSize := True;
      end else begin
        pn.Width := 32;
        pn.Height := 32;
      end;

      pn.Visible := True;

      AControl.Visible := True;
      Result := TControl (pn);
    except
    end;
  end;
end;
Auf der Aufrufseite darf und braucht keine Parentzuweisung mehr erfolgen, daher kommt es auch nicht mehr zum Asign (TFont) usw. und alles funktioniert wie gewünscht (kleine Einschränkung, für das Objekt funktioniert kein Align). Kann das zurückgegebene Panel dann in die Form oder z.B. in ein anderes Panel einfügen.

Einzige Sache, die mich gerade etwas irritiert: Es funktioniert mit TEdit, TButton, TListBox, usw., aber nicht mit TSpeedButton.

Das TSpeedbutton-Objekt wird ordnungsgemäß erzeugt, aber nicht angezeigt. Warum nur (TSpeedButton ist natürlich als Klasse in der DLL registiert)?

Geändert von Harry Stahl (23. Jul 2015 um 21:08 Uhr)
  Mit Zitat antworten Zitat