Een goede grap mag vrienden kosten.
Er kan er natuurlijk ook zelf property editor voor maken, zoek eens naar RegisterPropertyEditor(). Ohja, kijk ook naar TChangeLink of TImagelistLink. Naja, zoiets in die trant
[ Voor 88% gewijzigd door alienfruit op 17-07-2005 04:00 ]
Kijk, nu komen we ergensalienfruit schreef op zondag 17 juli 2005 @ 03:42:
TComponentImageIndexPropertyEditor
Er kan er natuurlijk ook zelf property editor voor maken, zoek eens naar RegisterPropertyEditor(). Ohja, kijk ook naar TChangeLink of TImagelistLink. Naja, zoiets in die trant
De TChangeLink had ik gisteren al geïmplementeerd, wijzigingen in de image list worden netjes afgevangen.
Een goede grap mag vrienden kosten.
Oftewel StdReg toevoegen aan je unit clause en vervolgens zeg je dat dclstd70.dcp is required bij je design time package. Volgens mij moet het zo werken, alweer een tijdje niet gedaan
[ Voor 71% gewijzigd door alienfruit op 17-07-2005 15:11 ]
Zou het kunnen dat TPersistentImageIndexPropertyEditor en TComponentImageIndexPropertyEditor sinds Delphi 6 naar vanuit de interface sectie van StdReg zijn verhuisd naar de implementation sectie?
Verder kwam ik via Google bij http://www.backslash.com.au/products/bcb5-book/chapter02/ uit. Ik heb inmiddels ontdekt dat ImageIndex van het type TImageIndex moet zijn en ImageList van het type TCustomImageList. Nu zie ik inderdaad een dropdown list bij de ImageList property verschijnen, alleen blijft hij leeg. Dat is volgens die link ook logisch, want er staat:
Bij mij zijn de ImageIndex en Images property allebei gedefinieerd in een TPersistent object, dat als parent een ander TPersistent object heeft. Conclusie: ik moet een descendant van TPersistentImageIndexPropertyEditor maken maar dan moet ik wel weten waar hij is gedeclareerd.The TPersistentImageIndexPropertyEditor is for TImageIndex properties in classes that descend from TPersistent (but not TComponent) with a parent component that has a TCustomImageList* property with the name Images.
Een goede grap mag vrienden kosten.
TTextBullet is een TPersistent descendant en heeft twee relevante properties: ImageIndex (type: TImageIndex) en Images (type: TCustomImageList). De parent van TTextBullet is irrelevant.
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
| unit MijnPropertyEditorReg; interface uses Classes, Types, SysUtils, Graphics, Math, ImgList, DesignIntf, DesignEditors, VCLEditors, TypInfo, MijnTTextBulletUnit; type { TTextBulletImageIndexProperty shows a dropdown list with images for the ImageIndex property of TTextBullet. It works similar to TPersistentImageIndexPropertyEditor, which is declared in the implementation section of StdReg.pas (package dclstd). } TTextBulletImageIndexProperty = class(TIntegerProperty, ICustomPropertyListDrawing) private procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas; var AWidth: Integer); procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas; var AHeight: Integer); procedure ListDrawValue(const Value: string; ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean); public function GetAttributes: TPropertyAttributes; override; function GetImageListAt(Index: Integer): TCustomImageList; virtual; procedure GetValues(Proc: TGetStrProc); override; end; procedure Register; implementation procedure TTextBulletImageIndexProperty.ListMeasureHeight(const Value: string; ACanvas: TCanvas; var AHeight: Integer); var ImgList: TCustomImageList; begin ImgList := GetImageListAt(0); AHeight := ACanvas.TextHeight(Value) + 2; if Assigned(ImgList) then AHeight := Max(AHeight, ImgList.Height + 4); end; procedure TTextBulletImageIndexProperty.ListMeasureWidth(const Value: string; ACanvas: TCanvas; var AWidth: Integer); var ImgList: TCustomImageList; begin ImgList := GetImageListAt(0); AWidth := ACanvas.TextWidth(Value) + 4; if Assigned(ImgList) then AWidth := Max(AWidth, ImgList.Width + 4); end; procedure TTextBulletImageIndexProperty.ListDrawValue(const Value: string; ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean); var ImgList: TCustomImageList; R: TRect; begin ImgList := GetImageListAt(0); ACanvas.FillRect(ARect); R := ARect; Inc(R.Left, 2); if Assigned(ImgList) then begin ImgList.Draw(ACanvas, R.Left, R.Top + 2, StrToInt(Value)); Inc(R.Left, ImgList.Width + 2); end; DefaultPropertyListDrawValue(Value, ACanvas, R, ASelected); end; function TTextBulletImageIndexProperty.GetAttributes: TPropertyAttributes; begin Result := [paMultiSelect, paValueList, paRevertable]; end; function TTextBulletImageIndexProperty.GetImageListAt(Index: Integer): TCustomImageList; var APersistent: TPersistent; begin APersistent := GetComponent(Index); if APersistent is TTextBullet then Result := TTextBullet(APersistent).Images else Result := nil; end; procedure TTextBulletImageIndexProperty.GetValues(Proc: TGetStrProc); var ImgList: TCustomImageList; i: Integer; begin ImgList := GetImageListAt(0); if Assigned(ImgList) then for i := 0 to ImgList.Count - 1 do Proc(IntToStr(i)); end; procedure Register; begin RegisterPropertyEditor(TypeInfo(TImageIndex), TTextBullet, '', TTextBulletImageIndexProperty); end; |
Een goede grap mag vrienden kosten.
Een goede grap mag vrienden kosten.
We adore chaos because we like to restore order - M.C. Escher
[ Voor 40% gewijzigd door alienfruit op 19-07-2005 19:56 ]
