DoubleBuffered Eigenschaft wird in der DFM in Delphi 2009 hinzugefügt, existiert nicht in Delphi 2007

StackOverflow https://stackoverflow.com/questions/271843

  •  07-07-2019
  •  | 
  •  

Frage

Heißt das, dass ich nicht eine Form zwischen delphi 2007 und 2009 teilen kann?

War es hilfreich?

Lösung

Ja. Es ist nicht möglich, wenn Sie die Eigenschaften entfernen, die nicht in Delphi 2007 aus dem DFM veröffentlicht werden.

Andere Tipps

DoubleBuffered hat seit einiger Zeit in Twincontrol gewesen. Der Unterschied in Delphi 2009 ist, dass es jetzt veröffentlicht wird. Wenn Sie mit nur ignorieren die Fehler leben können (und nicht machen die Eigenschaften arbeiten statt), ist hier eine mögliche Lösung:

unit Delphi2009Form;

interface

uses
  Windows, Classes, SysUtils, Controls, Forms;

type
{$IFDEF VER200}
  TDelphi2009Form = class(TForm);
{$ELSE}
  TDelphi2009Form = class(TForm)
  private
    procedure ReaderError(Reader: TReader; const Message: string; var Handled: Boolean);
  protected
    procedure ReadState(Reader: TReader); override;
  end;

  TReaderErrorProc = procedure(const Message: string);

var
  ReaderErrorProc: TReaderErrorProc = nil;
{$ENDIF}

implementation

{$IFNDEF VER200}
type
  THackReader = class(TReader);

procedure TDelphi2009Form.ReaderError(Reader: TReader; const Message: string; var Handled: Boolean);
begin
  with THackReader(Reader) do
    Handled := AnsiSameText(PropName, 'DoubleBuffered') or AnsiSameText(PropName, 'ParentDoubleBuffered');
  if Handled and Assigned(ReaderErrorProc) then
    ReaderErrorProc(Message);
end;

procedure TDelphi2009Form.ReadState(Reader: TReader);
begin
  Reader.OnError := ReaderError;
  inherited ReadState(Reader);
end;
{$ENDIF}

end.

Ändern Sie dann die Erklärungen der Formulare in Ihrem Projekt von TDelphi2009Form zu erben, z.

type
  TFormMain = class(TDelphi2009Form)
  ...

Dies wird zur Laufzeit arbeiten - die Eigenschaft Fehler ignoriert. Um es zu Entwurfszeit funktioniert auch, erstellen Sie ein Design-Paket nur, fügt designide.dcp seine requires-Klausel, und fügen Sie die folgende Einheit hinzu:

unit Delphi2009FormReg;

interface

uses
  Delphi2009Form;

procedure Register;

implementation

uses
  DesignIntf, DesignEditors, ToolsAPI;

procedure ShowReaderError(const Message: string);
begin
  with BorlandIDEServices as IOTAMessageServices do
    AddTitleMessage(Message);
end;

procedure Register;
begin
  RegisterCustomModule(TDelphi2009Form, TCustomModule);
  ReaderErrorProc := ShowReaderError;
end;

initialization

finalization
  ReaderErrorProc := nil;

end.

Installieren Sie das Paket in Delphi 2007 IDE und Eigentum Fehler für DoubleBuffered und ParentDoubleBuffered Eigenschaften werden automatisch ignoriert werden, wenn Sie Ihre Formulare in der IDE zu öffnen. Die Werte der Eigenschaften gehen verloren, wenn Sie das Formular in Delphi 2007 speichern, so sollten Sie sie in Code initialisieren statt.

Bearbeiten : Ich habe Code zur Ausgabe hinzugefügt, um die Leser Fehlermeldungen an die IDE-Fenster Meldungen:

IDE-Fehlermeldungen

Delphi-Projekte haben immer extrem einfach zu portieren auf neue Versionen gewesen. Sie müssen vorsichtiger sein, aber mit älteren Compilern aktuellen Code ist ziemlich geradlinig, auch. Ich beibehalten Code in Delphi 2005/2006/2007, dass andere Menschen noch in Delphi zu verwenden, benötigt 6 und 7.

Wenn Sie die inkompatiblen Eigenschaften aus dem DFMs entfernen, sollten sie richtig in älteren Versionen arbeiten, ohne dass sie sich für Delphi 2009. Das größte Beispiel Messing sind die expliziten * Eigenschaften eingeführt in Delphi 2006. Ich habe ein Haus gebraut „DFM Wäscher“ dass die Streifen diese aus. Denken Sie daran, diese Eigenschaften bestehen aus einem Grund, so sollten Sie nur schrubben diejenigen, die Sie beabsichtigen, kompatibel zu sein zurück.

Sie könnten auch erwägen in statischen Code-Analyse-Tool wie CodeHealer oder Pascal Analyzer investieren. Oben Probleme Hinweis auf (vor allem CodeHealer) und helfen Sie Ihren Code aufzuräumen, können Sie wählen, welche Version von Delphi gegen zu analysieren, ist es einfacher zu finden Unverträglichkeiten abgesehen von DFM Eigenschaften machen. Und sie können als Teil des Build-Prozess automatisiert werden.

Nur eine Notiz. Teilen Sie den Quellcode, aber halten Sie separate Projekte für jede Version. Dies ist besonders wichtig, zwischen Delphi 2007 und Delphi 2009. Die neuere .dproj Datei der gleiche Erweiterung verwendet, ist aber nicht kompatibel mit Delphi 2007. Sie mit inkompatiblen Ressourcen zu einem gewissen problame laufen konnten, auch.

Jede Form hat eine DFM-Datei, die die Eigenschaftseinstellungen des Formulars und seine Komponenten enthält. Einige Eigenschaftswerte haben Standardwerte, so dass sie nicht gespeichert werden, wenn der Standardwert gehalten wird. Ist hat nur einen kleinen Test:

  • Erstellen Sie ein Formular im Jahr 2009
  • Fügen Sie ein paar Standardkontrollen
  • Speichern Sie
  • Öffnen Sie im Jahr 2006 (leider keine 2007 auf diesem PC)

Und es funktionierte ohne Nachrichten. Aber vielleicht sind Sie nicht so viel Glück.

Mit Delphi, ist es oft ein wenig mühsam Daten zwischen den Versionen zu teilen. Ein Upgrade posibilities sind groß, aber Herabstufung ist mühsam. Also ich abraten Sharing Form von Dateien zwischen verschiedenen Versionen.

Soweit ich weiß, es ist nicht möglich, bedingt definiert in der DFM-Datei hinzuzufügen. Aber dann wieder, tun wir wirklich wollen, dass ... Ich würde einen Mechanismus bevorzugen, die unbekannten Eigenschaften ignoriert.

Sie können sicher die Eigenschaften in Code in OnCreate Methode für das Formular hinzufügen, und wickeln Sie ein {$ IFDEF VER200} // NEU PROPERTIES {$ ENDIF} um sie herum. Sie können DoubleBuffered außerhalb des ifdefs verlassen, wie es in Delphi 2007, anwesend war einfach nicht auf die Eigenschaft Inspektoren zur Verfügung.

Sie werden nur über die Eigenschaften kümmern, die Sie vom Standard gesetzt. Für DoubleBuffered, müssen Sie nur darüber Sorgen zu machen, wenn es auf true gesetzt ist.

Wenn die Delphi 2009 Form in Delphi 2007 geladen wird, erhalten Sie eine Warnung, dass eine Eigenschaft erhalten zerstört wird, nur zur Kenntnis dieser Eigenschaften machen, wie diejenigen sind, die Sie benötigen, zu behandeln.

Ich verwende nur, ein solches Verfahren zu meinem Code Delphi 2009 von Delphi 2006 zu migrieren Die meisten meiner Projekte enthalten mehrere gemeinsam genutzte Einheiten und muss in Delphi 2006 für die ausgelieferte Version und Delphi 2009 für die „nächste“ Release kompilieren. Ich habe auch viel Verwendung des {$ IFDEF UNICODE} machen definieren, wo ich eine Zeichenfolge versichern muß, ist Wide oder Ansistring in Abhängigkeit von der Routine.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top