Subversion Repositories winbugtracker

Rev

Rev 6 | Rev 8 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6 Rev 7
1
unit BugtrackerMain;
1
unit BugtrackerMain;
2
 
2
 
3
(*
3
(*
4
 * TODO:
4
 * TODO:
5
 * - abfragen ob speichern wenn fenster geschlossen wird
5
 * - abfragen ob speichern wenn fenster geschlossen wird
6
 * - Spezielle Filter
6
 * - Spezielle Filter
7
 *   ... Auflisten nach Modul
7
 *   ... Auflisten nach Modul
8
 *   ... Anzeigen der Agenda
8
 *   ... Anzeigen der Agenda
9
 * - verbinden mit ticketsystem von HS
9
 * - verbinden mit ticketsystem von HS
10
 * - rtf controls?
10
 * - rtf controls?
11
 * - Neue Felder:
11
 * - Neue Felder:
12
 *   ... Erfasser
12
 *   ... Erfasser
13
 *   ... Agenda
13
 *   ... Agenda
14
 *   ... Status = Offen, gefixt, Abgelehnt, Veröffentlicht
14
 *   ... Status = Offen, gefixt, Abgelehnt, Veröffentlicht
15
 *   ... RTF Feld als BIGTEXT definieren
15
 *   ... RTF Feld als BIGTEXT definieren
16
 * - Neue Aufteilung der States
16
 * - Neue Aufteilung der States
17
 *   ... Open, Fixed, Published, Wontfix/Rejected, Planned(Agenda)
17
 *   ... Open, Fixed, Published, Wontfix/Rejected, Planned(Agenda)
-
 
18
 *
-
 
19
 * NOT INCLUDED:
-
 
20
 * - duplicate of
-
 
21
 *
-
 
22
 * FUTURE:
-
 
23
 * - HS Info integration
18
 *)
24
 *)
19
 
25
 
20
interface
26
interface
21
 
27
 
22
uses
28
uses
23
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
29
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
24
  Dialogs, WideStrings, DB, SqlExpr, StdCtrls, ExtCtrls, DBCtrls,
30
  Dialogs, WideStrings, DB, SqlExpr, StdCtrls, ExtCtrls, DBCtrls,
25
  ADODB, ComCtrls, Grids, DBGrids, Mask, Menus, XPMan;
31
  ADODB, ComCtrls, Grids, DBGrids, Mask, Menus, XPMan;
26
 
32
 
27
type
33
type
28
  TfrmBugtracker = class(TForm)
34
  TfrmBugtracker = class(TForm)
29
    Panel1: TPanel;
35
    Panel1: TPanel;
30
    DBGrid1: TDBGrid;
36
    DBGrid1: TDBGrid;
31
    ComboBox1: TComboBox;
37
    ComboBox1: TComboBox;
32
    DBNavigator2: TDBNavigator;
38
    DBNavigator2: TDBNavigator;
33
    Panel2: TPanel;
39
    Panel2: TPanel;
34
    Label1: TLabel;
40
    Label1: TLabel;
35
    Label2: TLabel;
41
    Label2: TLabel;
36
    Label3: TLabel;
42
    Label3: TLabel;
37
    Label4: TLabel;
43
    Label4: TLabel;
38
    Label5: TLabel;
44
    Label5: TLabel;
39
    Label6: TLabel;
45
    Label6: TLabel;
40
    DBNavigator1: TDBNavigator;
46
    DBNavigator1: TDBNavigator;
41
    DBRichEdit1: TDBRichEdit;
47
    DBRichEdit1: TDBRichEdit;
42
    DBEdit1: TDBEdit;
48
    DBEdit1: TDBEdit;
43
    DBLookupComboBox1: TDBLookupComboBox;
49
    DBLookupComboBox1: TDBLookupComboBox;
44
    DBEdit2: TDBEdit;
50
    DBEdit2: TDBEdit;
45
    DBEdit3: TDBEdit;
51
    DBEdit3: TDBEdit;
46
    DBLookupComboBox2: TDBLookupComboBox;
52
    DBLookupComboBox2: TDBLookupComboBox;
47
    DBLookupComboBox3: TDBLookupComboBox;
53
    DBLookupComboBox3: TDBLookupComboBox;
48
    TrackBar1: TTrackBar;
54
    TrackBar1: TTrackBar;
49
    ADOConnection1: TADOConnection;
55
    ADOConnection1: TADOConnection;
50
    dsBugs: TDataSource;
56
    dsBugs: TDataSource;
51
    tblMitarbeiter: TADOTable;
57
    tblMitarbeiter: TADOTable;
52
    dsMitarbeiter: TDataSource;
58
    dsMitarbeiter: TDataSource;
53
    MainMenu1: TMainMenu;
59
    MainMenu1: TMainMenu;
54
    Stammdaten1: TMenuItem;
60
    Stammdaten1: TMenuItem;
55
    Mitarbeiter1: TMenuItem;
61
    Mitarbeiter1: TMenuItem;
56
    Projekte1: TMenuItem;
62
    Projekte1: TMenuItem;
57
    Module1: TMenuItem;
63
    Module1: TMenuItem;
58
    Versionen1: TMenuItem;
64
    Versionen1: TMenuItem;
59
    Projektwechseln1: TMenuItem;
65
    Projektwechseln1: TMenuItem;
60
    XPManifest1: TXPManifest;
66
    XPManifest1: TXPManifest;
61
    qryBugs: TADOQuery;
67
    qryBugs: TADOQuery;
62
    dsVersionen: TDataSource;
68
    dsVersionen: TDataSource;
63
    tblProjekte: TADOTable;
69
    tblProjekte: TADOTable;
64
    dsProjekte: TDataSource;
70
    dsProjekte: TDataSource;
65
    dsModule: TDataSource;
71
    dsModule: TDataSource;
66
    Timer1: TTimer;
72
    Timer1: TTimer;
67
    Splitter1: TSplitter;
73
    Splitter1: TSplitter;
68
    Hilfe1: TMenuItem;
74
    Hilfe1: TMenuItem;
69
    ber1: TMenuItem;
75
    ber1: TMenuItem;
70
    btnFixedToggle: TButton;
76
    btnFixedToggle: TButton;
71
    btnBearbeitungsnotiz: TButton;
77
    btnBearbeitungsnotiz: TButton;
72
    qryBugsid: TAutoIncField;
78
    qryBugsid: TAutoIncField;
73
    qryBugstitel: TStringField;
79
    qryBugstitel: TStringField;
74
    qryBugsbeschreibung: TMemoField;
80
    qryBugsbeschreibung: TMemoField;
75
    qryBugserstellt: TDateTimeField;
81
    qryBugserstellt: TDateTimeField;
76
    qryBugswichtigkeit: TIntegerField;
82
    qryBugswichtigkeit: TIntegerField;
77
    qryBugsbearbeiter: TIntegerField;
83
    qryBugsbearbeiter: TIntegerField;
78
    qryBugsfixdatum: TDateTimeField;
84
    qryBugsfixdatum: TDateTimeField;
79
    qryBugsversion_release: TIntegerField;
85
    qryBugsversion_release: TIntegerField;
80
    qryBugsmodul: TIntegerField;
86
    qryBugsmodul: TIntegerField;
81
    qryBugsprojekt: TIntegerField;
87
    qryBugsprojekt: TIntegerField;
82
    qryVersionen: TADOQuery;
88
    qryVersionen: TADOQuery;
83
    qryModule: TADOQuery;
89
    qryModule: TADOQuery;
84
    LblAngemeldet: TLabel;
90
    LblAngemeldet: TLabel;
85
    Label7: TLabel;
91
    Label7: TLabel;
86
    Label8: TLabel;
92
    Label8: TLabel;
87
    DBLookupComboBox4: TDBLookupComboBox;
93
    DBLookupComboBox4: TDBLookupComboBox;
88
    qryBugserfasser: TIntegerField;
94
    qryBugserfasser: TIntegerField;
89
    qryBugsversion_agenda: TIntegerField;
95
    qryBugsversion_agenda: TIntegerField;
90
    Label9: TLabel;
96
    Label9: TLabel;
91
    cbxErfasser: TDBLookupComboBox;
97
    cbxErfasser: TDBLookupComboBox;
92
    Label10: TLabel;
98
    Label10: TLabel;
93
    procedure Mitarbeiter1Click(Sender: TObject);
99
    procedure Mitarbeiter1Click(Sender: TObject);
94
    procedure qryBugsAfterScroll(DataSet: TDataSet);
100
    procedure qryBugsAfterScroll(DataSet: TDataSet);
95
    procedure Module1Click(Sender: TObject);
101
    procedure Module1Click(Sender: TObject);
96
    procedure Projekte1Click(Sender: TObject);
102
    procedure Projekte1Click(Sender: TObject);
97
    procedure Versionen1Click(Sender: TObject);
103
    procedure Versionen1Click(Sender: TObject);
98
    procedure TrackBar1Change(Sender: TObject);
104
    procedure TrackBar1Change(Sender: TObject);
99
    procedure Timer1Timer(Sender: TObject);
105
    procedure Timer1Timer(Sender: TObject);
100
    procedure ComboBox1Change(Sender: TObject);
106
    procedure ComboBox1Change(Sender: TObject);
101
    procedure Projektwechseln1Click(Sender: TObject);
107
    procedure Projektwechseln1Click(Sender: TObject);
102
    procedure qryBugsAfterInsert(DataSet: TDataSet);
108
    procedure qryBugsAfterInsert(DataSet: TDataSet);
103
    procedure ber1Click(Sender: TObject);
109
    procedure ber1Click(Sender: TObject);
104
    procedure btnFixedToggleClick(Sender: TObject);
110
    procedure btnFixedToggleClick(Sender: TObject);
105
    procedure qryBugsversion_releaseValidate(Sender: TField);
111
    procedure qryBugsversion_releaseValidate(Sender: TField);
106
    procedure FormCreate(Sender: TObject);
112
    procedure FormCreate(Sender: TObject);
107
    procedure qryVersionenAfterInsert(DataSet: TDataSet);
113
    procedure qryVersionenAfterInsert(DataSet: TDataSet);
108
    procedure qryModuleAfterInsert(DataSet: TDataSet);
114
    procedure qryModuleAfterInsert(DataSet: TDataSet);
109
    procedure btnBearbeitungsnotizClick(Sender: TObject);
115
    procedure btnBearbeitungsnotizClick(Sender: TObject);
110
  public
116
  public
111
    eingeloggtMitarbeiter: integer;
117
    eingeloggtMitarbeiter: integer;
112
    eingeloggtMitarbeiterName: string;
118
    eingeloggtMitarbeiterName: string;
113
    aktuellesProjekt: integer;
119
    aktuellesProjekt: integer;
114
    aktuellesProjektName: string;
120
    aktuellesProjektName: string;
115
    procedure NeuFiltern;
121
    procedure NeuFiltern;
116
    procedure NotizHinzufuegen(color: TColor; bez: string);
122
    procedure NotizHinzufuegen(color: TColor; bez: string);
117
  end;
123
  end;
118
 
124
 
119
var
125
var
120
  frmBugtracker: TfrmBugtracker;
126
  frmBugtracker: TfrmBugtracker;
121
 
127
 
122
implementation
128
implementation
123
 
129
 
124
uses Mitarbeiter, Module, Versionen, Projekte, Login, About, inifiles;
130
uses Mitarbeiter, Module, Versionen, Projekte, Login, About, inifiles;
125
 
131
 
126
{$R *.dfm}
132
{$R *.dfm}
127
 
133
 
128
procedure TfrmBugtracker.qryBugsAfterInsert(DataSet: TDataSet);
134
procedure TfrmBugtracker.qryBugsAfterInsert(DataSet: TDataSet);
129
begin
135
begin
130
  // Standardwerte für einen neuen Bug
136
  // Standardwerte für einen neuen Bug
131
  qryBugs.FieldByName('wichtigkeit').AsInteger := 5; // Mitte
137
  qryBugs.FieldByName('wichtigkeit').AsInteger := 5; // Mitte
132
  qryBugs.FieldByName('erstellt').AsDateTime := Now;
138
  qryBugs.FieldByName('erstellt').AsDateTime := Now;
133
  qryBugs.FieldByName('erfasser').AsInteger := eingeloggtMitarbeiter;
139
  qryBugs.FieldByName('erfasser').AsInteger := eingeloggtMitarbeiter;
134
  // qryBugs.FieldByName('bearbeiter').AsInteger := eingeloggtMitarbeiter;
140
  // qryBugs.FieldByName('bearbeiter').AsInteger := eingeloggtMitarbeiter;
135
  qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt;
141
  qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt;
136
end;
142
end;
137
 
143
 
138
procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet);
144
procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet);
139
var
145
var
140
  bakEvent: TNotifyEvent;
146
  bakEvent: TNotifyEvent;
141
begin
147
begin
142
  bakEvent := TrackBar1.OnChange;
148
  bakEvent := TrackBar1.OnChange;
143
  TrackBar1.OnChange := nil;
149
  TrackBar1.OnChange := nil;
144
  try
150
  try
145
    TrackBar1.Position := qryBugs.FieldByName('wichtigkeit').AsInteger;
151
    TrackBar1.Position := qryBugs.FieldByName('wichtigkeit').AsInteger;
146
  finally
152
  finally
147
    TrackBar1.OnChange := bakEvent;
153
    TrackBar1.OnChange := bakEvent;
148
  end;
154
  end;
149
end;
155
end;
150
 
156
 
151
procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField);
157
procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField);
152
begin
158
begin
153
  if qryBugs.FieldByName('fixdatum').IsNull then
159
  if qryBugs.FieldByName('fixdatum').IsNull then
154
  begin
160
  begin
155
    raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als gefixt markiert werden.');
161
    raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als gefixt markiert werden.');
156
  end;
162
  end;
157
end;
163
end;
158
 
164
 
159
procedure TfrmBugtracker.qryModuleAfterInsert(DataSet: TDataSet);
165
procedure TfrmBugtracker.qryModuleAfterInsert(DataSet: TDataSet);
160
begin
166
begin
161
  // Standardwerte für ein neues Modul
167
  // Standardwerte für ein neues Modul
162
  qryModule.FieldByName('projekt').AsInteger := aktuellesProjekt;
168
  qryModule.FieldByName('projekt').AsInteger := aktuellesProjekt;
163
end;
169
end;
164
 
170
 
165
procedure TfrmBugtracker.qryVersionenAfterInsert(DataSet: TDataSet);
171
procedure TfrmBugtracker.qryVersionenAfterInsert(DataSet: TDataSet);
166
begin
172
begin
167
  // Standardwerte für eine neue Version
173
  // Standardwerte für eine neue Version
168
  qryVersionen.FieldByName('projekt').AsInteger := aktuellesProjekt;
174
  qryVersionen.FieldByName('projekt').AsInteger := aktuellesProjekt;
169
end;
175
end;
170
 
176
 
171
procedure TfrmBugtracker.Timer1Timer(Sender: TObject);
177
procedure TfrmBugtracker.Timer1Timer(Sender: TObject);
172
begin
178
begin
173
  Timer1.Enabled := false;
179
  Timer1.Enabled := false;
174
  if frmLogin.ShowModal = mrCancel then Close;
180
  if frmLogin.ShowModal = mrCancel then Close;
175
end;
181
end;
176
 
182
 
177
procedure TfrmBugtracker.TrackBar1Change(Sender: TObject);
183
procedure TfrmBugtracker.TrackBar1Change(Sender: TObject);
178
begin
184
begin
179
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
185
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
180
  qryBugs.FieldByName('wichtigkeit').AsInteger := TrackBar1.Position;
186
  qryBugs.FieldByName('wichtigkeit').AsInteger := TrackBar1.Position;
181
end;
187
end;
182
 
188
 
183
procedure TfrmBugtracker.Versionen1Click(Sender: TObject);
189
procedure TfrmBugtracker.Versionen1Click(Sender: TObject);
184
begin
190
begin
185
  frmVersionen.ShowModal;
191
  frmVersionen.ShowModal;
186
end;
192
end;
187
 
193
 
188
procedure TfrmBugtracker.ber1Click(Sender: TObject);
194
procedure TfrmBugtracker.ber1Click(Sender: TObject);
189
begin
195
begin
190
  AboutBox.ShowModal;
196
  AboutBox.ShowModal;
191
end;
197
end;
192
 
198
 
193
procedure TfrmBugtracker.btnBearbeitungsnotizClick(Sender: TObject);
199
procedure TfrmBugtracker.btnBearbeitungsnotizClick(Sender: TObject);
194
begin
200
begin
195
  NotizHinzufuegen(clRed, 'Notiz');
201
  NotizHinzufuegen(clRed, 'Notiz');
196
end;
202
end;
197
 
203
 
198
procedure TfrmBugtracker.btnFixedToggleClick(Sender: TObject);
204
procedure TfrmBugtracker.btnFixedToggleClick(Sender: TObject);
199
begin
205
begin
200
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
206
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
201
  if qryBugs.FieldByName('fixdatum').IsNull then
207
  if qryBugs.FieldByName('fixdatum').IsNull then
202
  begin
208
  begin
203
    qryBugs.FieldByName('fixdatum').AsDateTime := Now;
209
    qryBugs.FieldByName('fixdatum').AsDateTime := Now;
204
    NotizHinzufuegen(clGreen, 'Gefixt');
210
    NotizHinzufuegen(clGreen, 'Gefixt');
205
  end
211
  end
206
  else
212
  else
207
  begin
213
  begin
208
    qryBugs.FieldByName('fixdatum').Clear;
214
    qryBugs.FieldByName('fixdatum').Clear;
209
    NotizHinzufuegen(clBlue, 'Neu eröffnet');
215
    NotizHinzufuegen(clBlue, 'Neu eröffnet');
210
  end;
216
  end;
211
end;
217
end;
212
 
218
 
213
procedure TfrmBugtracker.ComboBox1Change(Sender: TObject);
219
procedure TfrmBugtracker.ComboBox1Change(Sender: TObject);
214
begin
220
begin
215
  case ComboBox1.ItemIndex of
221
  case ComboBox1.ItemIndex of
216
    0:
222
    0:
217
      begin
223
      begin
218
        // Meine offenen Bugs (nach Wichtigkeit)
224
        // Meine offenen Bugs (nach Wichtigkeit)
219
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC';
225
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC';
220
      end;
226
      end;
221
    1:
227
    1:
222
      begin
228
      begin
223
        // Alle offenen Bugs (nach Wichtigkeit)
229
        // Alle offenen Bugs (nach Wichtigkeit)
224
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL ORDER BY wichtigkeit DESC';
230
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NULL ORDER BY wichtigkeit DESC';
225
      end;
231
      end;
226
    2:
232
    2:
227
      begin
233
      begin
228
        // Gelöst ohne Veröffentlichung (nach Lösungsdatum)
234
        // Gelöst ohne Veröffentlichung (nach Lösungsdatum)
229
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY fixdatum DESC';
235
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY fixdatum DESC';
230
      end;
236
      end;
231
    3:
237
    3:
232
      begin
238
      begin
233
        // Gelöst und Veröffentlicht (nach Version und Lösungsdatum)
239
        // Gelöst und Veröffentlicht (nach Version und Lösungsdatum)
234
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY version_release DESC, fixdatum DESC';
240
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND fixdatum IS NOT NULL ORDER BY version_release DESC, fixdatum DESC';
235
      end;
241
      end;
236
    4:
242
    4:
237
      begin
243
      begin
238
        // Alle Bugs (nach Eröffnungsdatum)
244
        // Alle Bugs (nach Eröffnungsdatum)
239
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' ORDER BY erstellt DESC';
245
        qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' ORDER BY erstellt DESC';
240
      end;
246
      end;
241
  end;
247
  end;
242
  qryBugs.Active := true;
248
  qryBugs.Active := true;
243
end;
249
end;
244
 
250
 
245
procedure TfrmBugtracker.FormCreate(Sender: TObject);
251
procedure TfrmBugtracker.FormCreate(Sender: TObject);
246
var
252
var
247
  ini: TMemIniFile;
253
  ini: TMemIniFile;
248
begin
254
begin
249
  ini := TMemIniFile.Create('bugtracker.ini');
255
  ini := TMemIniFile.Create('bugtracker.ini');
250
  try
256
  try
251
    ADOConnection1.Connected := false;
257
    ADOConnection1.Connected := false;
252
    ADOConnection1.ConnectionString := ini.ReadString('Database', 'ConnectionString', '');
258
    ADOConnection1.ConnectionString := ini.ReadString('Database', 'ConnectionString', '');
253
  finally
259
  finally
254
    ini.Free;
260
    ini.Free;
255
  end;
261
  end;
256
 
262
 
257
  ADOConnection1.Connected := true;
263
  ADOConnection1.Connected := true;
258
  qryBugs.Active := true;
264
  qryBugs.Active := true;
259
  tblMitarbeiter.Active := true;
265
  tblMitarbeiter.Active := true;
260
  qryVersionen.Active := true;
266
  qryVersionen.Active := true;
261
  tblProjekte.Active := true;
267
  tblProjekte.Active := true;
262
  qryModule.Active := true;
268
  qryModule.Active := true;
263
end;
269
end;
264
 
270
 
265
procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject);
271
procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject);
266
begin
272
begin
267
  frmMitarbeiter.ShowModal;
273
  frmMitarbeiter.ShowModal;
268
end;
274
end;
269
 
275
 
270
procedure TfrmBugtracker.Module1Click(Sender: TObject);
276
procedure TfrmBugtracker.Module1Click(Sender: TObject);
271
begin
277
begin
272
  frmModule.ShowModal;
278
  frmModule.ShowModal;
273
end;
279
end;
274
 
280
 
275
procedure TfrmBugtracker.NeuFiltern;
281
procedure TfrmBugtracker.NeuFiltern;
276
begin
282
begin
277
  ComboBox1Change(ComboBox1);
283
  ComboBox1Change(ComboBox1);
278
 
284
 
279
  qryModule.SQL.Text := 'SELECT * FROM module WHERE projekt = ' + IntToStr(aktuellesProjekt);
285
  qryModule.SQL.Text := 'SELECT * FROM module WHERE projekt = ' + IntToStr(aktuellesProjekt);
280
  qryModule.Active := true;
286
  qryModule.Active := true;
281
 
287
 
282
  qryVersionen.SQL.Text := 'SELECT * FROM versionen WHERE projekt = ' + IntToStr(aktuellesProjekt);
288
  qryVersionen.SQL.Text := 'SELECT * FROM versionen WHERE projekt = ' + IntToStr(aktuellesProjekt);
283
  qryVersionen.Active := true;
289
  qryVersionen.Active := true;
284
end;
290
end;
285
 
291
 
286
procedure TfrmBugtracker.NotizHinzufuegen(color: TColor; bez: string);
292
procedure TfrmBugtracker.NotizHinzufuegen(color: TColor; bez: string);
287
var
293
var
288
  leerzeilen: integer;
294
  leerzeilen: integer;
289
  umbruch: string;
295
  umbruch: string;
290
  prefix: string;
296
  prefix: string;
291
begin
297
begin
292
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
298
  if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
293
 
299
 
294
  // Endet der Text mit zwei Zeilenabständen? Wenn nein, dann einfügen.
300
  // Endet der Text mit zwei Zeilenabständen? Wenn nein, dann einfügen.
295
  leerzeilen := 0;
301
  leerzeilen := 0;
296
  if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-2, 2) = #13#10 then Inc(leerzeilen); // letzte Zeile
302
  if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-2, 2) = #13#10 then Inc(leerzeilen); // letzte Zeile
297
  if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-4, 2) = #13#10 then Inc(leerzeilen); // Vorletzte Zeile
303
  if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-4, 2) = #13#10 then Inc(leerzeilen); // Vorletzte Zeile
298
  case leerzeilen of
304
  case leerzeilen of
299
    0: umbruch := #13#10#13#10;
305
    0: umbruch := #13#10#13#10;
300
    1: umbruch := #13#10;
306
    1: umbruch := #13#10;
301
    2: umbruch := '';
307
    2: umbruch := '';
302
  end;
308
  end;
303
 
309
 
304
  DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
310
  DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
305
  DBRichEdit1.SelText := umbruch;
311
  DBRichEdit1.SelText := umbruch;
306
 
312
 
307
  DBRichEdit1.SelAttributes.Size := 13;
313
  DBRichEdit1.SelAttributes.Size := 13;
308
  DBRichEdit1.SelAttributes.Color := color;
314
  DBRichEdit1.SelAttributes.Color := color;
309
  DBRichEdit1.SelAttributes.Style := [fsUnderline];
315
  DBRichEdit1.SelAttributes.Style := [fsUnderline];
310
  if Trim(bez) <> '' then
316
  if Trim(bez) <> '' then
311
    prefix := Trim(bez) + ' - '
317
    prefix := Trim(bez) + ' - '
312
  else
318
  else
313
    prefix := '';
319
    prefix := '';
314
  DBRichEdit1.SelText := prefix + eingeloggtMitarbeiterName + ' ' + FormatDateTime('dd.mm.yyyy hh:nn', Now); // DateTimeToStr(Now);
320
  DBRichEdit1.SelText := prefix + eingeloggtMitarbeiterName + ' ' + FormatDateTime('dd.mm.yyyy hh:nn', Now); // DateTimeToStr(Now);
315
 
321
 
316
  DBRichEdit1.SelAttributes.Size := 10;
322
  DBRichEdit1.SelAttributes.Size := 10;
317
  DBRichEdit1.SelAttributes.Color := clWindowText;
323
  DBRichEdit1.SelAttributes.Color := clWindowText;
318
  DBRichEdit1.SelAttributes.Style := [];
324
  DBRichEdit1.SelAttributes.Style := [];
319
  DBRichEdit1.SelText := #13#10 {+ '<Hier Text eingeben>'};
325
  DBRichEdit1.SelText := #13#10 {+ '<Hier Text eingeben>'};
320
 
326
 
321
  // Ans Ende scrollen
327
  // Ans Ende scrollen
322
  DBRichEdit1.SetFocus;
328
  DBRichEdit1.SetFocus;
323
  DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
329
  DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
324
  DBRichEdit1.Perform(EM_SCROLLCARET, 0, 0);
330
  DBRichEdit1.Perform(EM_SCROLLCARET, 0, 0);
325
end;
331
end;
326
 
332
 
327
procedure TfrmBugtracker.Projekte1Click(Sender: TObject);
333
procedure TfrmBugtracker.Projekte1Click(Sender: TObject);
328
begin
334
begin
329
  frmProjekte.ShowModal;
335
  frmProjekte.ShowModal;
330
end;
336
end;
331
 
337
 
332
procedure TfrmBugtracker.Projektwechseln1Click(Sender: TObject);
338
procedure TfrmBugtracker.Projektwechseln1Click(Sender: TObject);
333
begin
339
begin
334
  frmLogin.ShowModal;
340
  frmLogin.ShowModal;
335
end;
341
end;
336
 
342
 
337
end.
343
end.
338
 
344