Autor Beitrag
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 08.04.05 17:52 
Hallo alle zusammen.
Jetzt habe ich Delphi 2005 und will natürlich meine Selbstgebastelten Komponenten auch da haben.
By the way, möchte ich Sie glich auch nioch ein bissl verbessern und bei der Aboutbox schüttet er mich, wenn ich die Komponente benutzten will geradezu mit Fehlermeldungen voll :evil: :
Zugriffverletztung in rtl-sonstwas-.bpl hier, dasselbe in grün da :roll: :? .

Und ich habs immer noch nicht hingekriegt, also Frage ich einfach einmal euch alle.

Hier ist der Code (strotzt bestimmt nur so vor Fehlern, denn das meiste ist auch rein intuitiv entstanden):
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:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
unit JayAboutBox;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, XPMan, About;

type
  TProductName = class(Tobject)
  private
    FCaption: String;
    FFont: TFont;
  public
    property Caption: String read FCaption write FCaption;
    property Font: TFont read FFont write FFont;
    constructor Create;
    destructor Destroy;
  end;

  TCompany = class(Tobject)
  private
    FCaption: String;
    FFont: TFont;
  public
    property Caption: String read FCaption write FCaption;
    property Font: TFont read FFont write FFont;
    constructor Create;
    destructor Destroy;
  end;

  TOKButton = class(Tobject)
  private
    FCaption: String;
    oGlyph: TBitmap;
    procedure SetGlyph(NewBitmap: TBitmap);
  public
    property Caption: String read FCaption write FCaption;
    property Glyph: TBitmap read oGlyph write SetGlyph;
    constructor Create;
    destructor Destroy;
    end;

  TJayAboutBox = class(TCommonDialog)
  private
    FVersionText, FCopyrightText, FComments: String;
    oProductName: TProductName;
    oCompany: TCompany;
    oOKButton: TOKButton;
    oProgramIcon: TPicture;
    FColor: TColor;
    oFont: TFont;
    procedure SetProgramIcon(NewPicture: TPicture);
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Execute: Boolean;
    { Public-Deklarationen }
  published
    property ProductName: TProductName read oProductName write oProductName;
    property Company: TCompany read oCompany write oCompany;
    property VersionText: String read FVersionText write FVersionText;
    property CopyrightText: String read FCopyrightText write FCopyrightText;
    property Comments: String read FComments write FComments;
    property OKButton: TOKButton read oOKButton write oOKButton;
    property ProgramIcon: TPicture read oProgramIcon write SetProgramIcon;
    property Color: TColor read FColor write FColor;
    property Font: TFont read oFont write oFont;
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Jakobs Komponenten', [TJayAboutBox]);
end;

constructor TProductName.Create;
begin
  FFont := TFont.Create;
end;

destructor TproductName.Destroy;
begin
  FFont.Free;
end;

constructor TCompany.Create;
begin
  FFont := TFont.Create;
end;

destructor TCompany.Destroy;
begin
  FFont.Free;
end;

constructor TOKButton.Create;
begin
  oGlyph := TBitmap.Create;
end;

destructor TOKButton.Destroy;
begin
  oGlyph.Free;
end;

procedure TOKButton.SetGlyph(NewBitmap: TBitmap);
begin
  if oGlyph <> NewBitmap then
    oGlyph.Assign(NewBitmap);
end;

constructor TJayAboutBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);            // Basisklasse aufrufen
  oProgramIcon := TPicture.Create;     // Instanzen erzeugen
  oFont := TFont.Create;
  oProductName := TProductName.Create;
  oCompany := TCompany.Create;
  oOKButton := TOKButton.Create;
end;

destructor TJayAboutBox.Destroy;
begin
  oOKButton.Free;
  oCompany.Free;
  oProductName.Free;
  oFont.Free;
  oProgramIcon.Free;
  inherited Destroy;
end;

procedure TJayAboutbox.SetProgramIcon(NewPicture: TPicture);
begin
  if oProgramIcon <> NewPicture then
    oProgramIcon.Assign(NewPicture);
end;

function TJayAboutBox.Execute;
begin
  AboutBox := TAboutBox.Create(Application);
  try
    try
      AboutBox.HeaderPanel.Caption := Productname.Caption;
      Aboutbox.HeaderPanel.Font := ProductName.Font;
      AboutBox.LargePrgIcon.Picture := ProgramIcon;
      AboutBox.SmallPrgIcon.Picture.Icon := Application.Icon;
      AboutBox.CompanyName.Caption := Company.Caption;
      AboutBox.CompanyName.Font := Company.Font;
      AboutBox.Version.Caption := Versiontext;
      AboutBox.Copyright.Caption := CopyrightText;
      AboutBox.CommentsText.Caption := Comments;
      AboutBox.btnOK.Caption := OKButton.Caption;
      AboutBox.btnOK.Glyph := OKButton.Glyph;
      AboutBox.ShowModal;
      Result := true;
    except
      Result := false
    end;
  finally
    AboutBox.Free;
  end;
end;

end.


Da fällt mir auf, das das ja schon recht viel ist. Na Ja. Wäre schön, wenn mit einer helfen könnte.

Schonma Danke im vorraus.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 08.04.05 18:03 
Was ist denn die Klasse About? Ich hab die bei mir nicht im System :nixweiss:
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 08.04.05 18:13 
user profile iconUGrohne hat folgendes geschrieben:
Was ist denn die Klasse About? Ich hab die bei mir nicht im System :nixweiss:

About ist die Unit, die das Formular der Box enthält. Irgentwas muss der Benutzer ja doch zu sehen bekommen :lol: .
Drauf sind nur ein paar Panels, Images und Labels, und nicht zu vergessen ein BitBtn.

Ach so: AboutBox ist die Variable für die Form innerhalb der unit About. Nicht das noch einer dannach fragt. ;-)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 08.04.05 18:21 
user profile iconJayK hat folgendes geschrieben:
...About ist die Unit, die das Formular der Box enthält. Irgentwas muss der Benutzer ja doch zu sehen bekommen :lol: .
Drauf sind nur ein paar Panels, Images und Labels, und nicht zu vergessen ein BitBtn.
...


Wieso packst Du das nicht in die Objektablage ? :shock:

_________________
Gruß
Hansa
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 08.04.05 18:48 
@hansa:
1. Weil das viel zu einfach wäre :D.
2. Weil ich die Eigenschaften meiner persönlichen AboutBox gleich zentral eistellen können will.
3. Weil ich dann immer wieder so ne Unit in den Projektordner speichern müsste.

Mehr fällt mir jetzt nich ein :roll: .
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 08.04.05 19:00 
haha, zu einfach. 8) Es ergeben sich deshalb folgende Fragen : Hast Du schon eine eigene Komponente gebaut, die geht ? Tja, den Rest kann ich mir ersparen, sofern die Frage nicht mit Ja beantwortet wird. :mrgreen:

_________________
Gruß
Hansa
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 08.04.05 19:07 
user profile iconhansa hat folgendes geschrieben:
Hast Du schon eine eigene Komponente gebaut, die geht ?

Ja habe ich. Zu der Zeit (vor 2 Wochen :) ) mit D6 geschrieben.
Da sind aber JVCL Komponenten bei und ich krieg bis jetzt das JEDI-Zeugs nich in D2005 installiert.
Deshalb will ich ja neuschreiben. Ansonsten hätte ich die Komponente wahrscheinlich doch nur übernommen.

Und wo ich doch mal neuschreibe, wolte ich eigentlich noch was dazupacken. Nich so tolle Idee, wie mir jetze scheint. :( .

Das mit den drei Objects oben im Code sollte eigentlich dafür sorgen, dass das im OI verschachtelt wird, aber ich glaube das macht man irgentwie anders :roll: .
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 08.04.05 19:25 
In der Tat macht man so was ganz anders. Mit der Objektablage. :lol: Eigene Komponenten sind angebracht für Sonderfälle/Erweiterungen von den vorhandenen. Aber eben nicht für Forms und komplexere Sachen. Woraus soll denn Deine Aboutbox bestehen ?

Bzw., wo ist ein Vorfahr zu finden, um die davon abzuleiten ?

_________________
Gruß
Hansa
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 08.04.05 21:34 
Ich werde mal zusammenstellen wie das später sein soll. Aber hierherposten wohl eher erst morgen. Ich werd bestimmt gleich ins Bett geschickt :roll: . Also bis Morgen.
JayK
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 08.04.05 23:58 
Um Missverständnissen vorzubeugen : handelt es sich um ein einziges Steuerelement, z.B. Label, Listbox usw., dann macht eine Komponente Sinn. Für eine kombinierte Geschichte würde ich die Objektablage verwenden und per inherited Vererbung zulassen.

_________________
Gruß
Hansa
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Sa 09.04.05 11:24 
Also,
ich möchte das dann folgendermaßen haben:
(siehe Anhang)
Man soll
    Caption der Form (als property Caption)
    die Color der Form (property Color)
    Caption und Font des HeadPanel (das obere) (property (ggf. zum Aufklappen im OI) ProductName)
    Caption und Font des Labels, wo Firma steht (property (ggf. zum Aufklappen) CompanyName)
    alle anderen Labels nur Caption (properties CopyrightText, Versiontext, Comments)
    Picture von ProgramIcon (TImage) (property ProgramIcon)
    Caption und Glyph von btnOK (TBitBtn) (property (ggf. zum Aufklappen) OKButton)

verändern können.
SmallProgramIcon soll beim Createn das Application.icon zugewiesen werden (Das hab ich ja schon geschafft).

So jetzt hab ich euch genug gesagt (genervt) glaub ich.

So, ich sehe gerade user profile iconhansa hat wieder was geschrieben.
Zitat:
Für eine kombinierte Geschichte würde ich die Objektablage verwenden und per inherited Vererbung zulassen.
Das mit inherited und so habe ich noch nicht so ganz durchschaut. Könntest du mir bitte sagen was du meinst? :?
Einloggen, um Attachments anzusehen!
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Do 14.04.05 19:39 
Aaalsooooo,
aus der regen Beteiligung an diesem Thread schließe ich, dass es folgende Probleme geben könnte:
ausblenden Quelltext
1:
2:
3:
4:
5:
Man versteht mich nicht.
Man schüttelt einfach nur den Kopf und denkt sich: "Na so was bescheuertes!" und klickt dann weiter.
Ihr habts aufgegeben mir irgentwie das beibringen zu versuchen.
Der Thread wurde vergessen.
Alle haben für sowas keine Zeit.

Mehr Ideen habe ich jetzt nicht, ich wüsste aber gerne was davon es ist. :)

PS. Ich will damit jetzt keine Vorwüfe verbreiten, damit mich hier niemand falsch versteht.
Stefan-W
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Do 14.04.05 20:37 
also ich denk du bist (wie oben schon geschrieben) mit der Objektablage am besten drann... kannst ja alles was du ändern willst im OnCreate-Ereignis ändern da hast du dann alles auf einen Blick und kannst nichts vergessen.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 15.04.05 10:56 
Wer Antworten so :

user profile iconJayK hat folgendes geschrieben:
@hansa:
1. Weil das viel zu einfach wäre :D.



behandelt, der weiß offensichtlich sowieso alles besser und flüchtet in die Poesie. :lol:

_________________
Gruß
Hansa
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Fr 15.04.05 16:30 
Na OK, dann werde ich wohl doch mal lieber das mit der Objektablage machen. Wenn jetzt alle darauf verweisen :) .

Meint ihr jetzt noch irgentwas spezielles damit oder einfach nur:
    Form > Rechtsklick > Der Objektablage hinzufügen
Stefan-W
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 475

Win 7 SP1
D2005 PE
BeitragVerfasst: Fr 15.04.05 18:09 
jip genau das meinen wir

(und kannst ja vorher noch das mit dem OnCreate machen dann brauchst du das nur da ändern und nicht jedes einzeln...)