AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadComponentResFile

Ein Thema von Igotcha · begonnen am 23. Nov 2004 · letzter Beitrag vom 27. Nov 2004
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

ReadComponentResFile

  Alt 23. Nov 2004, 17:31
Hallo zusammen,

ich benutze D7 und erhalte eine "Invalid Stream Format"-Fehlermeldung, wenn ich versuche, Form2 gem. nachfolgendem Code zu erstellen.

Form2 wird in den Projektoptionen nicht automatisch erzeugt.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  path: String;
begin
    path:=ExtractFilePath(Paramstr(0));
    Form2:=TForm2.CreateNew(Application);
    ReadComponentResFile(path+'unit2.dfm',Form2);
    Form2.Show;
end;

end.
Unit2 sieht so aus:

Delphi-Quellcode:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

//{$R *.dfm}

end.
Das Beispiel ist aus dem D6 Kochbuch und eigentlich 1:1 übernommen.

Gruß Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: ReadComponentResFile

  Alt 23. Nov 2004, 17:37
Möchtest du nur ein Formular dynamisch erstellen? Beziehungsweise ein Formular mehrmals öffnen? Dann nimm die Kommentare bei //{$R *.dfm} in Unit 2 weg und lass das mit dem ReadComponentResFile.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ReadComponentResFile

  Alt 23. Nov 2004, 18:31
Also wie man eine Form und diese auch dynamisch generiert weiß ich

Ich möchte aber, dass der User das Layout der Form (innerhalb bestimmter Grenzen) ändern kann.

Dazu gehört z.B.
  • das Hinzufügen von DB-Komponenten zur Anzeige von Daten bzw. Neugruppierung von sichtbaren Komponenten und
  • das Hinzufügen von Buttons, hinter die dann Pascal-Script hinterlegt wird
Es handelt sich also um Standardformen mit einem Standardlayout - dieses soll vom Anwender noch nachkonfiguriert werden können.

Ausserdem suche ich ja eine Antwort auf die Frage, warum da ein "Invalid Stream Format"-Fehler kommt.

Gruß Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: ReadComponentResFile

  Alt 23. Nov 2004, 18:37
Mmmh. Auszug aus der Delphi-Hilfe:
Zitat:
Durch einen Aufruf von ReadComponentResFile können eine Komponente und ihre Nachkommen aus der entsprechenden Darstellung in einer Windows-Ressourcendatei erstellt werden
Wenn ich das richtig interpretiere müsste man die dfm-Datei als Windows-Ressourcendatei (*.res) kompilieren. Aber das möchtest du ja nicht, da der User die selbst bearbeiten soll.

Ich würde ehr vermuten, dass es irgendwie über TReader gemacht werden muss. Allerdings habe ich soetwas noch nie gemacht, sind also alles nur Denkansätze.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ReadComponentResFile

  Alt 23. Nov 2004, 18:54
Wie gesagt, das ist ein Beispiel aus einem Buch und 1:1 übernommen. Allerdings war das Beispiel für D6.
  Mit Zitat antworten Zitat
Benutzerbild von Fossibaer58809
Fossibaer58809

Registriert seit: 20. Aug 2004
Ort: Lüdenscheid
50 Beiträge
 
Delphi 2007 Professional
 
#6

Re: ReadComponentResFile

  Alt 27. Nov 2004, 12:44
Hallo zusammen,

ich meine mich dunkel erinnern zu können, dass man in Delphi 6 auswählen konnte ob die Formulardateien als Resource oder als Text abgespeichert werden sollen. In Delphi 7 ist das Textformat aber Standard. Deshalb muss die Datei konvertiert werden um sie mit ReadComponentResFile einlesen zu können.

Hier ein kurzes funktionierendes Beispiel (ganz quick and dirty).
Code:
procedure TForm1.Button1Click(Sender: TObject);
var path : string;
    InStream,OutStream : TMemoryStream;
begin
    path:=ExtractFilePath(Paramstr(0));
    Instream := TMemoryStream.Create;
    OutStream := TMemoryStream.Create;
    InStream.LoadFromFile(path+'unit2.dfm');
    InStream.Position := 0;
    ObjectTextToResource(InStream, OutStream);
    OutStream.Position := 0;
    Form2:=TForm2.CreateNew(Application);
    OutStream.ReadComponentRes(Form2);
    InStream.Free;
    OutStream.Free;
    Form2.Show;
end;
Michael Küper
Der Kreis ist eine Figur, bei der an allen Ecken und Kanten gespart wurde.
  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 20:10 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