Autor Beitrag
florida
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
BeitragVerfasst: So 03.10.10 20:11 
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:
Einloggen, um Attachments anzusehen!
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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.

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:
[..]
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
private
  ColorValue: Integer;
public 
    property Color: Integer read ColorValue write ColorValue;

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Zuletzt bearbeitet von Tilman am So 03.10.10 20:23, insgesamt 1-mal bearbeitet
florida Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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 ;)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
florida Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
BeitragVerfasst: 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.
Einloggen, um Attachments anzusehen!
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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:
ausblenden 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.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
florida Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 137

Windows 7 Home Premium, Windows XP Professional, Windows 2000
Delphi 2010 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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 ;)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)