Entwickler-Ecke

Sonstiges (Delphi) - Neue Klassenbibliothek: Fehler


florida - So 03.10.10 20:11
Titel: Neue Klassenbibliothek: Fehler
Ich habe mich letzter Zeit ein bisschen mit Klassenbibliotheken beschäftigt und versuche seit heute mittag, mir selber eine Klassensammlung zu schreiben, aber jetzt treten schon die ersten Probleme auf. Und zwar gibt Delphi ständig einen Fehler raus, wenn ich versuche, eine property in diese Sammlung zu integrieren.

Hier ist der Code:


Tilman - So 03.10.10 20:15

Die prozedur WColor muss doch den Wert auch entgegennehmen procedure WColor(ColorValue: Integer);

Und nächstes mal bitte auch die Fehlermeldung schreiben ;)

//edit
Da sind noch mehr Fehler drin. Da darf gar kein var sein, Felder werden in Klassen unter private deklariert.


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:
[..]
type
  OWindow = class
  private
    Name: string;
    ColorValue: Integer;
    constructor Create();
    procedure Show(Caption: PWideChar; Left, Top, Width, Height, hWndParent,
      Menu: Integer);
    function RColor: Integer;
    procedure WColor(Value: Integer);
  published
    property Color: Integer read RColor write WColor;

  end;

implementation

uses windows, messages;

var
  wClass: TWndClass;
  Msg: TMsg;

procedure OWindow.WColor;
begin
  ColorValue := Value;
end;

function OWindow.RColor: Integer;
begin
  result := ColorValue;
end;
[..]


Du brauchst für die Property übrigens überhaupt keine Procedure/Function zu deklarieren, du kannst das auch einfach so machen:

Delphi-Quelltext
1:
2:
3:
4:
private
  ColorValue: Integer;
public 
    property Color: Integer read ColorValue write ColorValue;


florida - So 03.10.10 20:21

OK! Vielen Dank! Ich habe es jetzt abgeändert und es funktioniert einigermaßen schon. :D

Aber jetzt habe ich ein kleines Beispielprogramm geschrieben, welches auf die property "Color" zugreift, jedoch wird die Fensterfarbe nicht geändert, sondern stattdessen kommt die Runtime-Meldung "Stack-Überlauf".


Tilman - So 03.10.10 20:28

Ich war noch nicht ganz fertig, mehr dazu im obigen Post. Ansonsten gilt auch jetzt wieder:
1. Code Posten
2. Fehlermeldung Posten
3. Hilfe erhalten.

Nichts für ungut ;)


florida - So 03.10.10 20:41

Ich habe gerade eben den Quellcode bearbeitet, wie es im Post stand.
Jetzt läuft es auch, aber die Farbe des Beispielprogrammes ändert sich trotzdem nicht.


Tilman - So 03.10.10 20:52

Da kann sich ja auch nichts ändern, denn du erzeugst das Fenster (oWindow.Show) mit der Farbe, und setzt erst danach Color. Du müsstest die zeilen umdrehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
    with Window1 do
    begin
      Color := 2;
      Show('aaa'50050050050000);
    end;


, allerdings ist das wohl auch nicht das was du suchst. Stattdessen müsstest du du dann wohl doch wieder eine procedure zum setzen der Property einfügen, und in dieser Code schreiben mit dem die Farbe des Fensters geändert wird. Aber frag mich nicht wie, ich habe noch nie auf diese Art Fenster erzeugt.


florida - So 03.10.10 20:55

Tatsächlich muss es umgedreht werden. Ich dachte immer, man müsse das Fenster zuerst zeugen, da es bei der OWL glaube ich genauso war.


Tilman - So 03.10.10 20:58

Wie gesagt, es würde nur funktionieren wenn du dafür sorgst dass es funktioniert. Von selbst funktioniert meistens relativ wenig ;)