Autor Beitrag
pmw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Mo 12.08.02 18:49 
Hallo!

Ich bin im Moment dabei eine Wizardkomponente zu programmieren. Zur Laufzeit arbeitet die Komponente bisher auch einwandfrei. Leider ist die Navigation aber zur Entwicklungszeit noch umständlich. Gibt es vielleicht auch irgendwie die Möglichkeit, zur Entwicklungszeit unter Delphi, durch einen Klick auf einen Button die aktuelle Seite einer Notebook Komponente ändern.

Viele Dank im Voraus!
Martin Winandy

ausblenden volle Höhe 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:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
unit Wizard;

interface

uses
   Windows, Classes, ExtCtrls, StdCtrls;
  

type
  TOnPageChanged = procedure(Sender: TObject; var NewPage: Integer) of object;
  TWizard = class(TComponent)
  private
    FPages: tNoteBook;
    FTextNext, FTextBack, FTextCancel, FTextFinish: String;
    FNextButton, FBackButton, FCloseButton: TButton;
    FOnNext, FOnBack: tOnPageChanged;
    FOnFinish, FOnCancel: tNotifyEvent;
  protected
     procedure GoNext(Sender: TObject);
     procedure GoBack(Sender: TObject);
     Procedure GoClose(Sender: TObject);
  public
     constructor Create(AOwner: TComponent); override;
     procedure SetPages(Value: TNoteBook);
     procedure SetTextNext(Value: String);
     procedure SetTextBack(Value: String);
     procedure SetTextCancel(Value: String);
     procedure SetTextFinish(Value: String);
     procedure SetNextButton(Value: TButton);
     procedure SetBackButton(Value: TButton);
     procedure SetCloseButton(Value: TButton);
     procedure ChangeButtons;
  published
     property Pages:       TNoteBook read FPages        write SetPages;
     property TextNext:    String    read FTextNext     write SetTextNext;
     property TextBack:    String    read FTextBack     write SetTextBack;
     property TextCancel:  String    read FTextCancel   write SetTextCancel;
     property TextFinish:  String    read FTextFinish   write SetTextFinish;
     property NextButton:  TButton   read FNextButton   write SetNextButton;
     property BackButton:  TButton   read FBackButton   write SetBackButton;
     property CloseButton: TButton   read FCloseButton  write SetCloseButton;

     property OnNext: TOnPageChanged  read FOnNext      write FOnNext;
     property OnBack: TOnPageChanged  read FOnBack      write FOnBack;
     property OnCancel: TNotifyEvent  read FOnCancel    write FOnCancel;
     property OnFinish: TNotifyEvent  read FOnFinish    write FOnFinish;
  end;

procedure Register;

implementation

Constructor TWizard.Create(AOwner: TComponent);
begin

   inherited;

   FTextNext := '&Next >';
   FTextBack := '< &Back';
   FTextCancel := '&Cancel';
   FTextFinish := '&Finish';

   ChangeButtons;

end;

procedure TWizard.GoNext(Sender: TObject);
var
NewPage: Integer;
begin

   NewPage := 0;
   if Assigned(FPages) then begin
      NewPage := FPages.PageIndex;
      if FPages.PageIndex < FPages.Pages.Count then
         Inc(NewPage);
   end;

   if Assigned(FOnNext) then
      FOnNext(self,NewPage);

   if Assigned(FPages) then begin
      if NewPage in [0..FPages.Pages.Count-1] then
         FPages.PageIndex := NewPage;
   end;

   ChangeButtons;

end;

procedure TWizard.GoBack(Sender: TObject);
var
NewPage: Integer;
begin

   NewPage := 0;
   if Assigned(FPages) then begin
      NewPage := FPages.PageIndex;
      if FPages.PageIndex > 0 then
         Dec(NewPage);
   end;

   if Assigned(FOnBack) then
      FOnBack(self,NewPage);

   if Assigned(FPages) then begin
      if NewPage in [0..FPages.Pages.Count-1] then
         FPages.PageIndex := NewPage;
   end;

   ChangeButtons;

end;

procedure TWizard.GoClose(Sender: TObject);
begin

   if Assigned(FPages) then begin
      if FPages.Pages.Count-1 = FPages.PageIndex then
         FOnFinish(Self)
      else
         FOnCancel(Self);
   end
   else
         FOnCancel(Self);
End;

procedure TWizard.ChangeButtons;
begin

   FNextButton.Caption := FTextNext;
   FBackButton.Caption := FTextBack;
   if Assigned(FPages) then begin
      if FPages.Pages.Count-1 = FPages.PageIndex then
         FCloseButton.Caption := FTextFinish
      else
         FCloseButton.Caption := FTextCancel;
   end
   else
      FCloseButton.Caption := FTextCancel;

end;

procedure TWizard.SetPages(Value: TNoteBook);
begin

   FPages := Value;
   ChangeButtons;

end;

procedure TWizard.SetNextButton(Value: TButton);
begin

   FNextButton := Value;
   if Assigned(FNextButton) then
      FNextButton.OnClick := GoNext;
   ChangeButtons;

end;


procedure TWizard.SetBackButton(Value: TButton);
begin

   FBackButton := Value;
   if Assigned(FBackButton) then
      FBackButton.OnClick := GoBack;
   ChangeButtons;

end;

procedure TWizard.SetCloseButton(Value: TButton);
begin

   FCloseButton := Value;
   if Assigned(FCloseButton) then
      FCloseButton.OnClick := GoClose;
   ChangeButtons;

end;

procedure TWizard.SetTextNext(Value: string);
begin

   FTextNext := Value;
   ChangeButtons;

end;

procedure TWizard.SetTextBack(Value: string);
begin

   FTextBack := Value;
   ChangeButtons;

end;

procedure TWizard.SetTextCancel(Value: string);
begin

   FTextCancel := Value;
   ChangeButtons;

end;

procedure TWizard.SetTextFinish(Value: string);
begin

   FTextFinish := Value;
   ChangeButtons;

end;

procedure Register;
begin
  RegisterComponents('Beispiele', [TWizard]);
end;

end.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mo 12.08.02 22:31 
Hallo,

du kannst doch mit der Eingenschaft ActivePage (ich glaube die nennt sich so) die aktive Seite auswählen. Außerdem gibt es im Kontexmenü zwei Menüpunkte um innerhalb der tNotebook-Komponenten zu Navigieren.

Gruß
TINO