Autor Beitrag
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 13:08 
XXXXXXXXXXXX


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:19, insgesamt 1-mal bearbeitet
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 24.07.09 13:11 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
type nameless = class(TObject)

    private

    F_CurrentActivityNumber: integer;
    F_NameOfButton: string;
    F_NextActivityNumber: integer;
    F_Telegramtyp :integer;

    {F_get_CurrentActivityNumber: integer;
    F_get_NameOfButton: string;
    F_get_NextActivityNumber: integer;
    F_get_Telegramtyp :integer;}



    {procedure set_CurrentActivityNumber(const Value: integer);
    procedure set_NameOfButton (const Value: integer);
    procedure set_ActivityNumber (const Value: integer);
    procedure set_Telegramtyp (const Value: integer);}


    Public

    {property CurrentActivityNumber : Integer Read F_get_CurrentActivityNumber Write set_CurrentActivityNumber;
    property NameOfButton : String Read F_get_NameOfButton Write set_NameOfButton;
    property TextActivityNumber : Integer Read F_get_NextActivityNumber Write set_ActivityNumber;
    property Telegramtyp : Integer Read F_get_Telegramtyp Write set_Telegramtyp;}


    property CurrentActivityNumber : Integer Read F_CurrentActivityNumber Write F_CurrentActivityNumber;
    property NameOfButton : String Read F_NameOfButton Write F_NameOfButton;
    property TextActivityNumber : Integer Read F_NextActivityNumber Write F_NextActivityNumber;
    property Telegramtyp : Integer Read F_Telegramtyp Write F_Telegramtyp;

  end;

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 13:15 
XXXXXX


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:19, insgesamt 1-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 13:17 
Du kannst natürlich auch Getter und Setter verwenden, aber das ist nur dann notwendig, wenn Du (im Setter) spezielle Überprüfungen durchführen oder weiteren Code ausführen möchtest.
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 13:42 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
type Tnameless = class(TObject)

    private

 F_CurrentActivityNumber: integer;
 F_NameOfButton: string;
 F_NextActivityNumber: integer;
 F_Telegramtyp :integer;

    procedure set_CurrentActivityNumber(const Value: integer);
    procedure set_NameOfButton (const Value: integer);
    procedure set_ActivityNumber (const Value: integer);
    procedure set_Telegramtyp (const Value: integer);

    Public

    property CurrentActivityNumber : Integer Read F_CurrentActivityNumber Write F_CurrentActivityNumber;
    property NameOfButton : String Read F_NameOfButton Write F_NameOfButton;
    property NextActivityNumber : Integer Read F_NextActivityNumber Write F_NextActivityNumber;
    property Telegramtyp : Integer Read F_Telegramtyp Write F_Telegramtyp;
  end;




ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
// Implementierung

begin

  Properties := Tnameless.Create();
  try

    properties.CurrentActivityNumber := tempList[0];
    properties.NameOfButton :=tempList[1] ;
    properties.NextActivityNumber := tempList[2];
    properties.Telegramtyp := tempList[3];

  finally
    properties.Free;
  end;



stimmt das soweit? :)
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 24.07.09 13:51 
Funktioniert es denn? :gruebel:
In Deiner Klasse brauchst Du Procedures nicht. Die hatte Dir ja eigentlich schon auskommentiert.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 14:04 
da templist eine String verlangt habe ich noch bei 3 Eigenschaften "IntToStr(tempList[?]) eingefügt.


Der einzigste Fehler:

MainForm.pas(479): E2250
Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann


Liegt das daran das ich die Buttons noch nicht erstellt habe?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 14:07 
Was ist denn templist? Außerdem enthält Deine Klasse nicht die Buttonreferenz, sondern nur den Namen des Buttons, das hätte ich anders gemacht.
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 14:15 
CCCCCC


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:19, insgesamt 1-mal bearbeitet
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 24.07.09 14:28 
Andersrum: StrToInt. Du willst ja einen String in einen Integer wandeln und nicht einen Integer in String.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 24.07.09 14:28 
Du hast Deine Daten

21; Text1 DG11;21;21
22; Text2 DG12;22;21
23; Text3 DG13;23;21
%24; Text4 DG14;24;21
%34; Text 5 DG11;34;45

wie am anfang beschrieben, in eine Stringlist eingelesen,

templist[0] zeigt auf eine Zeile in deiner Liste,
also auf (0 = 1te Zeile)

21; Text1 DG11;21;21

du möchtest aber einen Wert aus der Zeile haben, also musst du die datenzeile 'nur noch' in einzelteile zerlegen, damit du auch die richtigen Werte zuweisen kannst

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 14:34 
@Zuma

das hatte ich schon gestern gemacht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin
            Readln(FDatafile, daten);
            if copy(daten,1,1) <> '%' then 
 begin
                tempList.Delimiter := ';';  
                tempList.StrictDelimiter := true;   
                tempList.DelimitedText := daten;



Ich muss jetzt nur noch die Buttons erstellen?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 14:36 
Ich hab jetzt doch einmal ein ausführlicheres Beispiel erstellt:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
unit uButtontest;

interface

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

type
  TMyButtonclass = class
  private
    FAdditionaldata: Integer;
    FButton: TButton;
  public
    constructor Create;
    destructor Destroy;override;
    property AdditionalData: integer read FAdditionaldata write FAdditionaldata;
    property Button: TButton read FButton;
  end;

  TfrmButtontest = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FButtons: TObjectList;
    procedure ShowButtonInfo(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  frmButtontest: TfrmButtontest;

implementation

{$R *.dfm}

const IniName = 'C:\temp\Test.ini';

{ TMyButtonclass }

//Im Konstruktor wird der Button automatisch erzeugt
constructor TMyButtonclass.Create;
begin
  inherited Create;
  FButton := TButton.Create(nil);
end;

//... und im Destruktor automatisch freigegeben
destructor TMyButtonclass.Destroy;
begin
  FButton.Free;
  inherited;
end;

procedure TfrmButtontest.FormCreate(Sender: TObject);
var iIni: TIniFile;
    Sections: TStringList;
    i: Integer;
    Buttonclass: TMyButtonclass;
begin
  //Objectlist anlegen
  FButtons := TObjectList.Create;
  iIni := TIniFile.Create(IniName);
  try
    //Ini auslesen
    Sections := TStringList.Create;
    try
      iIni.ReadSections(Sections);
      //pro Abschnitt ein Button
      for I := 0 to Sections.Count - 1 do
        begin
          Buttonclass := TMyButtonclass.Create;
          //Eigenschaften aus der Ini auslesen und zuweisen
          Buttonclass.Button.Name := Sections[i];
          Buttonclass.Button.Parent := Self;
          Buttonclass.Button.Left := iIni.ReadInteger(Sections[i],'Left',0);
          Buttonclass.Button.Top := iIni.ReadInteger(Sections[i],'Top',0);
          Buttonclass.Button.Width := iIni.ReadInteger(Sections[i],'Width',0);
          Buttonclass.Button.Height := iIni.ReadInteger(Sections[i],'Height',0);
          Buttonclass.Button.Caption := iIni.ReadString(Sections[i],'Caption','');
          //OnClick-Handler dynamisch zuweisen
          Buttonclass.Button.OnClick := ShowButtonInfo;
          Buttonclass.AdditionalData := i;
          //Button in der Objectlist ablegen
          FButtons.Add(Buttonclass);
        end;
    finally
      Sections.Free;
    end;
  finally
    iIni.Free;
  end;
end;

procedure TfrmButtontest.FormDestroy(Sender: TObject);
begin
  //Objectlist freigeben
  FButtons.Free;
end;

procedure TfrmButtontest.ShowButtonInfo(Sender: TObject);
begin
  if Sender is TButton then
    ShowMessage(Format('Ich bin der Button "%s", meine Caption ist "%s"',
                [TButton(Sender).Name,TButton(Sender).Caption]));
end;

end.

Die zugehörige Ini-Datei:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
[Bla]
Caption=Blubb
Left=1
Top=10
Width=75
Height=25

[Blubb]
Caption=Wuppdi
Left=1
Top=40
Width=75
Height=25
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 24.07.09 14:45 
Ist bei der TObjectList OwnsObjects standardmäßig True? Sonst noch auf True setzen. Oder den Konstruktor der TMyButtonClass ändern:
ausblenden Delphi-Quelltext
1:
FButton := TButton.Create(self);					

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 14:47 
Jepp, ist standardmäßig true. Und self dürfte nicht funktionieren, da TMyButtonclass nicht von TComponent abgeleitet ist ;)
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 14:52 
hmm.. ist das Beispiel von DeddyH schon eine TObjectList? :O
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 14:54 
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 TfrmButtontest = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    FButtons: TObjectList;
    procedure ShowButtonInfo(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

;)
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 14:56 
@DeddyH


arghh.. dummer Fehler ich habe den Scrollbalken gar nicht gesehen, vielen Dank!
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 15:23 
XXXXXX


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:19, insgesamt 1-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 15:40 
Mein Code war ja nur ein Beispiel, um zu zeigen, wie man die Daten zusammenhalten kann. Dafür brauchst Du keine extra Ini-Datei, die hatte ich nur gepostet, um den von mir verwendeten Aufbau zu zeigen.
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.