FAQ

Oktober 9, 2007 - Lesezeit: ~1 Minute

Der 1. Versuch eines FAQ

Tags:

eine Collection-Property mit Editor erstellen, ohne das diese im Objektinspektor sichtbar ist...

Oktober 9, 2007 - Lesezeit: 2 Minuten
  • Property public definieren
public
   property SeriesList: TCollection read FSeriesList write SetSeriesList;
 end; 

  • Property für Speichern/Laden anmelden
private
    procedure ReadSeries(Reader: TReader);
    procedure WriteSeries(Writer: TWriter);
  protected
    procedure DefineProperties(Filer: TFiler); override;
    ...
procedure TdspExtChart.ReadSeries(Reader: TReader);
begin
  SeriesList.Clear;
  Reader.ReadValue;
  Reader.ReadCollection(SeriesList);
end;
procedure TdspExtChart.WriteSeries(Writer: TWriter);
begin
  Writer.WriteCollection(FSeriesList);
end;
procedure TdspExtChart.DefineProperties(Filer: TFiler);
begin
  inherited;
  Filer.DefineProperty('SeriesList', ReadSeries, WriteSeries, True);
end;
  • Editor für die Eigenschaft erstellen
uses Classes,dspChart,DesignEditors,DesignIntf,ColnEdit;
// Package designide70 für ColnEdit einfügen !!!
type
  TDspChartEditor = class(TComponentEditor)
  public
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
  end;
procedure Register;
begin
  RegisterComponents('Dsp', [TdspExtChart]);
  RegisterComponentEditor(TdspExtChart,TDspChartEditor);
end;
{ TDspChartEditor }
procedure TDspChartEditor.ExecuteVerb(Index: Integer);
begin
  if Index=0 then
    ShowCollectionEditor(Designer, Component,
   (Component as TdspExtChart).SeriesList, 'SerienList')
  else
    inherited ExecuteVerb(Index-1);
end;
function TDspChartEditor.GetVerb(Index: Integer): string;
begin
  if Index=0 then
    Result:='Serien bearbeiten'
  else
    Result:=inherited GetVerb(Index-1);
end;
function TDspChartEditor.GetVerbCount: Integer;
begin
  Result:= inherited GetVerbCount+1;
end;
  • verbesserte Routine zum Speichern, das in der Vererbung von Formularen gleiche Property's nur einmal gespeichert werden
procedure TdspExtChart.DefineProperties(Filer: TFiler);
var
  StoreIt: boolean;
  Chart2: TdspExtChart;
begin
  inherited;
  Chart2 := Filer.Ancestor as TdspExtChart;
  if Chart2 = nil then // keine Vererbung
    StoreIt := true // immer Speichern
  else              // Coll. vergleichen
    StoreIt := not CollectionsEqual(
      FSeriesList, Chart2.FSeriesList, self, Chart2);
  Filer.DefineProperty('SeriesList', ReadSeries, WriteSeries, StoreIt);
end;
Tags:

Neue String-Funktionen

Oktober 9, 2007 - Lesezeit: ~1 Minute

QuotedStr

 

function QuotedStr(const S: string): string; 

 

Mit QuotedStr kann der String S in einen String in Anführungszeichen umgewandelt werden. Am Anfang und am Ende von S wird ein halbes Anführungszeichen (') hinzugefügt. Wenn innerhalb des Strings halbe Anführungszeichen enthalten sind, werden diese verdoppelt.

Hinweis: Verwenden Sie für die Arbeit mit Multibyte-Zeichensätzen (MBCS) stattdessen die Funktion AnsiQuotedStr.

 

FindCmdLineSwitch

 

function FindCmdLineSwitch(const Switch: string; const Chars: TSysCharSet; IgnoreCase: Boolean): Boolean; overload;
function FindCmdLineSwitch(const Switch: string): Boolean; overload;
function FindCmdLineSwitch(const Switch: string; IgnoreCase: Boolean): Boolean; overload;

 

FindCmdLineSwitch bestimmt, ob ein String einen Kommandozeilenschalter repräsentiert. Maßgebend ist das erste Zeichen des Strings.

Switch ist ein Kommandozeilenparameter, der typischerweise von der Funktion ParamStr übergeben wird.

Chars ist die Zeichenmenge, die Schalter von anderen Parametern unterscheidet. Wenn SwitchChars nicht angegeben ist, wird der Standardwert "/" und "-"  verwendet.

IgnoreCase bestimmt, ob Zeichen unter Berücksichtigung der Groß- und Kleinschreibung verglichen werden. Standardeinstellung ist true.
 

Tags: