AGB  ·  Datenschutz  ·  Impressum  







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

Komponente mit TStrings Property erstellen

Ein Thema von GuenterS · begonnen am 9. Sep 2006 · letzter Beitrag vom 19. Jan 2014
 
Gutelo

Registriert seit: 29. Sep 2013
152 Beiträge
 
#14

AW: Komponente mit TStrings Property erstellen

  Alt 19. Jan 2014, 16:17
Hallo Rufo,

ich stell das Problem mal kurz dar mit Auszug aus meiner Komponente

Code:

unit MyComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Dialogs, ExtCtrls, Math, StrUtils;

type TPanelButton = record
    Left : integer;
    Top : integer;
    Width : integer;
    Height : integer;
    Caption : String;
    BorderColor : TColor;
    FillColor : TColor;
    FillCheckColor : TColor;
    UnCheckedFont : TFont;
    CheckedFont : TFont;
    Checked : boolean;
  end;

  Type TPanelButtons = Array of TPanelButton;
 
  ...

  MyComponent = class(TPaintBox)
  private
    VButtonList : TStringList;
    ...
    procedure SetButtonList(Value: TStringList);
    AllButtons : TPanelButtons;

  published
    ...
    property ButtonList : TStringList read VButtonList write SetButtonList;
  public
    procedure ReadButtons(List : TStrings; var BTNArr : TPanelButtons);
  ...
  implementation
  ...

  constructor MyComponent.Create(AOwner: TComponent);
  begin
    inherited Create(AOwner);
    VButtonList := TStringList.create;
    ...
  end;

  procedure MyComponent.SetButtonList(Value: TStringList);
  begin
     VButtonList.Assign(Value);
     ReadButtons(VButtonList, AllButtons);
     refresh;
  end;

  procedure MyComponent.ReadButtons(List : TStrings; var BTNArr : TPanelButtons);
  var
    i: Integer;
    PosKomma : integer;
    PosStart : integer;
  begin
    // Format of Button Strings: Caption,Left,Width,Top,Height
    SetLength(BTNArr, List.count);
    for i := 0 to List.Count - 1 do
    begin
      // Caption
      PosStart := 1;
      PosKomma := Pos(',', List[i]);
      BTNArr[i].Caption := Copy(List[i],PosStart,PosKomma-PosStart);
      // Left
      PosStart := PosKomma+1;
      PosKomma := PosEx(',', List[i], PosStart);
      BTNArr[i].Left := StrToInt(Copy(List[i],PosStart,PosKomma-PosStart));
      // Top
      PosStart := PosKomma+1;
      PosKomma := PosEx(',', List[i], PosStart);
      BTNArr[i].Width := StrToInt(Copy(List[i],PosStart,PosKomma-PosStart));
      // Width
      PosStart := PosKomma+1;
      PosKomma := PosEx(',', List[i], PosStart);
      BTNArr[i].Top := StrToInt(Copy(List[i],PosStart,PosKomma-PosStart));
      // Height
      PosStart := PosKomma+1;
      PosKomma := Length(List[i])+1;
      BTNArr[i].Height := StrToInt(Copy(List[i],PosStart,PosKomma-PosStart));
      // Other Button Options
      BTNArr[i].UnCheckedFont := TFont.Create;
      BTNArr[i].UnCheckedFont.Color := clBlue;
      BTNArr[i].CheckedFont := TFont.Create;
      BTNArr[i].CheckedFont.Color := clWhite;
      BTNArr[i].BorderColor := clBlue;
      BTNArr[i].FillColor := clWhite;
      BTNArr[i].FillCheckColor := clBlue;
      BTNArr[i].Checked := false;
    end;
  end;

  ...
  procedure MyComponent.paint();
  begin
     ... hier werden die buttons aus dem Array gezeichnet
  end;
Wie vorher schon gesagt reicht das "ReadButtons(VButtonList, AllButtons);" in SetButtonList nicht aus. Das AllButtons Array, welches zur Designzeit gefuellt wird, ist zur Laufzeit wieder leer. Auch wenn ich "ReadButtons(VButtonList, AllButtons);" in AfterConstruction packe bleibt das Array leer.

Ich vermute, dass es am "Array of record" liegt. Bei anderen Strukturen bleiben die Werte zwischen Designzeit und Laufzeit erhalten.

Geändert von Gutelo (19. Jan 2014 um 16:19 Uhr)
  Mit Zitat antworten Zitat
 


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 12:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz