| Autor |
Beitrag |
JayK
      
Beiträge: 1013
|
Verfasst: 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  :
Zugriffverletztung in rtl-sonstwas-.bpl hier, dasselbe in grün da  .
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):
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); protected public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function Execute: Boolean; 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; 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); oProgramIcon := TPicture.Create; 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
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 08.04.05 18:03
Was ist denn die Klasse About? Ich hab die bei mir nicht im System 
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Fr 08.04.05 18:13
UGrohne hat folgendes geschrieben: | Was ist denn die Klasse About? Ich hab die bei mir nicht im System  |
About ist die Unit, die das Formular der Box enthält. Irgentwas muss der Benutzer ja doch zu sehen bekommen  .
Drauf sind nur ein paar Panels, Images und Labels, und nicht zu vergessen ein BitBtn.
Ach so: About Box ist die Variable für die Form innerhalb der unit About. Nicht das noch einer dannach fragt. 
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 08.04.05 18:21
_________________ Gruß
Hansa
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Fr 08.04.05 18:48
@hansa:
1. Weil das viel zu einfach wäre  .
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  .
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 08.04.05 19:00
haha, zu einfach.  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. 
_________________ Gruß
Hansa
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Fr 08.04.05 19:07
hansa 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  .
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 08.04.05 19:25
In der Tat macht man so was ganz anders. Mit der Objektablage.  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 
      
Beiträge: 1013
|
Verfasst: 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  . Also bis Morgen.
JayK
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: 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 
      
Beiträge: 1013
|
Verfasst: 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 hansa 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 
      
Beiträge: 1013
|
Verfasst: Do 14.04.05 19:39
Aaalsooooo,
aus der regen Beteiligung an diesem Thread schließe ich, dass es folgende Probleme geben könnte:
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
      
Beiträge: 475
Win 7 SP1
D2005 PE
|
Verfasst: 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
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 15.04.05 10:56
Wer Antworten so :
JayK hat folgendes geschrieben: | @hansa:
1. Weil das viel zu einfach wäre .
|
behandelt, der weiß offensichtlich sowieso alles besser und flüchtet in die Poesie. 
_________________ Gruß
Hansa
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: 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
      
Beiträge: 475
Win 7 SP1
D2005 PE
|
Verfasst: 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...)
|
|