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



BeitragVerfasst: Fr 24.07.09 08:41 
*DELETE*


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:17, 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 08:51 
Moin,

Du könntest eine kleine Hilfsklasse schaffen, die die Eingeschaften enthält, die Du jetzt in Tag, Hint und FOtherButtons hältst. Für jede Eigenschaft eine Property. Außerdem schaffst Du Dir eine TObjectList, in der Du eine Liste von Instanzen dieser Klassen hälst. Für jeden Button eine Instanz. Und schlussendlich speicherst Du im Tag des Buttons nur noch einen Verweis auf die Hilfsklase mit den Eingenschaften.
Das hat den Vorteil, dass Du nur die Hilfsklasse um Properties erweitern musst, wenn noch weitere Eigenschaften dazu kommen.

Gruß,
Jens

_________________
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 09:24 
@Jens

Danke, dein Vorschlag ist wirklich gut.
Sollen die die Eigenschaften von Width, Height, Top etc. auch in der Hilfsklasse
bei den Proberties gespeichert werden?

Ich habe aber wirklich keine Ahnung wie ich das genau realsieren soll, könntest du mir mal zeigen wie sowas aussieht?
Ich weiß das ich soetwas alleine lösen sollte, aber ich komme mit den Klassen von Delphi nicht so klar. Da man i-wie die Klasse nach dem erstellen noch frei geben muss, wegen der Speicherbelegung und solche Dinge. Ich werde da auf jeden Fall noch lernen, aber jetzt muss ich erstmal diese Aufgabe lösen.

Mfg
DaaN
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 09:34 
Naja, das Width, Height und so weiter bezieht sich ja direkt auf den Button, bzw. ändert das Aussehen des Buttons. Daher sollte man sie auch im Button lassen.
Ich habe es so verstanden, dass noch weitere Eigenschaften hast, wofür Du Properties (z.B. das TAG) des Buttons "missbraucht" hast, um sie zu speichern. Das missbrauchen würde man mit der Hilfsklasse vermeiden.

Die generelle Funktion der TObjectList kannst Du hier durcharbeiten: www.delphi-treff.de/...als/vcl/tobjectlist/

_________________
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 09:45 
hmm.. Kannst du mir das nicht bitte machen? Ich möchte endlich eine andere Aufgabe bekommen, da ich diese total hasse und wenn ich die jetzt noch alleine löse brauche ich dafür mind. 3 Std. bis das perfekt läuft. Du brauchst ja auch nicht alle proberties bei der Klasse zu deklarieren, die restlichen füge ich dann selber dazu.
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 09:47 
Was zahlst Du?

Sorry, aber ein bisschen Eigeninitiative musst Du schon zeigen. Das verlinkte Tutorial hast Du in < 1 Stunde durchgearbeitet und Du hast etwas gelernt!

_________________
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 09:53 
bitte, es geht ja nicht nur im die Funktion TObjectList, die Klasse muss ja auch noch erstellt werden.
Wenn du mir das machen würdest, könnte ich das als Beispiel nehmen um zu verstehen wie soetwas "komplexes" aufgebaut ist.
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 09:59 
Eine Minimalklasse sieht z.B. so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type
  THilfsklasse = class(TObject)
    Public
      Eigenschaft1 : integer;
      Eigenschaft2 : Integer;
      Eigenschaft3 : String;
  end;


Instanzen erstellst Du dann so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var instanz : THilfsklasse;
begin

  instanz := THilfsklasse.Create(); {Instanz erzeugen}
  try

    {Eigenschaften zuweisen}
    instanz.Eigenschaft1 := 4711;
    instanz.Eigenschaft2 := 123;
    instanz.Eigenschaft3 := 'test';
  finally
    {Instanz wieder freigeben}
    instanz.Free;
  end;


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 10:05 
Danke, aber wo taucht jetzt da die Funktion TObjectList auf?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 24.07.09 10:07 
Leite Doch einfach eine eigene Klasse ab:

hier nur inkomplett zusammengehackt:
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:
unit MYButton;
interface
uses

     Windows, SysUtils, Messages, Classes, Controls, Forms , Buttons;
Type
  TMyButton = class(TButton)
  private
    F_iInfo1:Integer;
    F_sInfo1:String;  
  protected
  Procedure SetiInfo1(Value:Integer)
  Procedure SetsInfo1(Value:String)  
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
  Property iInfo1:Integer Read F_iInfo1 Write SetiInfo1;
  Property sInfo1:Integer Read F_sInfo1 Write SetsInfo1;
  end;

procedure Register;
implementation
Procedure TMyButton.SetiInfo1(Value:Integer);
begin
  F_iInfo1 := Value;
  // >> + was auch immer Du hier tun wills
end;

procedure Register;
begin
  RegisterComponents('WoAuchImmer', [TMyButton]);
end;


end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
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 10:07 
Arbeite das Tutorial durch. Sorry, aber ich werde langsam wortkarg.

_________________
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 11:06 
****DELETE********


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:18, 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 11:18 
Das ist die Eigeninitiative, die ich sehen wollte! :zustimm: Dann werde ich auch wieder Gesprächiger.
Es gibt in Delphi 2 (3) Möglichkeiten, Properties zu erstellen.

In der ersten Möglichkeit wird in der Property-Deklaration direkt auf die Variablen verwiesen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  THilfklasse = class(TObject)
    Private
      {Wir deklarieren uns private Variablen, die die Daten halten}
      F_Eigenschaft1 : Integer;
      F_Eigenschaft2 : Integer;
      F_Eigenschaft3 : Integer;
    Public
      {Jetzt die Eigentlichen Properties}
      Property Eigenschaft1 : integer Read F_Eigenschaft1; {Diese Propertyp ist read only}
      Property Eigenschaft2 : integer Read F_Eigenschaft2 Write F_Eigenschaft2; {Diese Property ist read und write}
      Property Eigenschaft3 : integer Write F_Eigenschaft2; {Diese Property ist write only}
  end;


Bei der 2. Möglichkeit setzt Du die Werte mit Prozeduren:
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:
 THilfklasse = class(TObject)
    Private
      {Wir deklarieren uns private Variablen, die die Daten halten}
      F_Eigenschaft1 : Integer;
      F_Eigenschaft2 : Integer;
      F_Eigenschaft3 : Integer;
    function get_Eigenschaft1: integer;
    function get_Eigenschaft2: integer;
    procedure set_Eigenschaft2(const Value: integer);
    procedure set_Eigenschaft3(const Value: integer);
    Public
      {Jetzt die Eigentlichen Properties}
      Property Eigenschaft1 : integer Read get_Eigenschaft1; {Diese Propertyp ist read only}
      Property Eigenschaft2 : integer Read get_Eigenschaft2 Write set_Eigenschaft2; {Diese Property ist read und write}
      Property Eigenschaft3 : integer Write set_Eigenschaft3; {Diese Property ist write only}
  end;
implementation

{ THilfklasse }

function THilfklasse.get_Eigenschaft1: integer;
begin
  result := F_Eigenschaft1;
end;

function THilfklasse.get_Eigenschaft2: integer;
begin
  result := F_Eigenschaft2;
end;

procedure THilfklasse.set_Eigenschaft2(const Value: integer);
begin
  F_Eigenschaft2 := Value;
end;

procedure THilfklasse.set_Eigenschaft3(const Value: integer);
begin
  F_Eigenschaft3 := Value;
end;


Du kannst Möglichkeit 1 und 2 mischen, also z.B. im Read direkt auf die Variable verweisen, aber im Write die Prozedur verwenden.

Die 3. Möglichkeit hatte ich oben schon gezeigt, das sind einfach nur Public-Variablen. Diese Möglichkeit würde ich als Quick&Dirty bezeichnen. Für Deinen Zweck würde ich die erste Möglichkeit verwenden.

Jens

_________________
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 11:39 
Kleine Anregung: statt die Tag-Property des Buttons als Verweis zu verwenden, würde ich eine Klasse anlegen, die die Zusatzinformationen und die Button-Referenz enthält und diese dann in einer TObjectlist verwalten.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type 
  TMyButton = class
  private
    FAdditionalInfo: integer; //nur als Beispiel
    FButton: TButton;
  public
    property AdditionalInfo: integer read FAdditionalInfo write FAdditionalInfo;
    property Button: TButton read FButton;
  end;
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 11:40 
***DELETE****


Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:18, 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 11:46 
Es ist in Delphi üblich, dass Du in diesem Fall die Variable mit F als Präfix benennst. Also oben:
ausblenden Delphi-Quelltext
1:
2:
private
    F_CurrentActivityNumber: integer;


Immer, wenn Du einen Button erstellst, erstellst Du auch eine Instanz der Hilfsklasse, weißt die Properties zu und speicherst sie in der TObjectList.
Wobei ich sagen muss, dass ich den Vorschlag von DeddyH super finde. Würde ich einarbeiten.

_________________
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 11:50 
@DeddyH

gute Idee. Die werde ich auf jeden Fall berücksichtigen.


@Jens

Danke für deine hilfreichen Tips, ich gehe nun erstmal in die Kantine essen und versuche danach danach die Instanzen zuerstellen. Ich hoffe du und andere bleiben mir noch weiter als Ansprechpartner zur Verfügung.
Major1337 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 24.07.09 12:54 
wenn ich aber den Präfix F davor setze, dann bekomme ich bei Read lauter Fehlermeldungen das get_"..." nicht deklariert ist. ;(
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.07.09 13:02 
Du musst das F auch überall da davor setzen, wo die Variable gemeint ist.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
private
  FMyVar: integer;
public
  property MyVar: integer read FMyVar write FMyVar;
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:03 
Du musst es dann an den Stellen auch ändern, damit die Property direkt auf die Variable zugreift.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
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.