Subversion Repositories winbugtracker

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev HEAD

/trunk/BugtrackerMain.pas
0,0 → 1,423
unit BugtrackerMain;
 
(*
* TODO:
* - Spezielle Filter
* ... Auflisten nach Modul
* ... Anzeigen der Agenda
* - rtf control bar?
* - ein neu angelegter bug soll links aus der leiste verschwinden, wenn er nicht in das kriterium passt
*
* NOT INCLUDED:
* - duplicate of
*
* FUTURE:
* - HS Info integration
*)
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WideStrings, DB, SqlExpr, StdCtrls, ExtCtrls, DBCtrls,
ADODB, ComCtrls, Grids, DBGrids, Mask, Menus, XPMan;
 
type
TfrmBugtracker = class(TForm)
Panel1: TPanel;
DBGrid1: TDBGrid;
ComboBox1: TComboBox;
DBNavigator2: TDBNavigator;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
DBNavigator1: TDBNavigator;
DBRichEdit1: TDBRichEdit;
DBEdit1: TDBEdit;
DBLookupComboBox1: TDBLookupComboBox;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBLookupComboBox2: TDBLookupComboBox;
DBLookupComboBox3: TDBLookupComboBox;
TrackBar1: TTrackBar;
ADOConnection1: TADOConnection;
dsBugs: TDataSource;
tblMitarbeiter: TADOTable;
dsMitarbeiter: TDataSource;
MainMenu1: TMainMenu;
Stammdaten1: TMenuItem;
Mitarbeiter1: TMenuItem;
Projekte1: TMenuItem;
Module1: TMenuItem;
Versionen1: TMenuItem;
Projektwechseln1: TMenuItem;
XPManifest1: TXPManifest;
qryBugs: TADOQuery;
dsVersionen: TDataSource;
tblProjekte: TADOTable;
dsProjekte: TDataSource;
dsModule: TDataSource;
Timer1: TTimer;
Splitter1: TSplitter;
Hilfe1: TMenuItem;
ber1: TMenuItem;
btnBearbeitungsnotiz: TButton;
qryBugsid: TAutoIncField;
qryBugstitel: TStringField;
qryBugsbeschreibung: TMemoField;
qryBugserstellt: TDateTimeField;
qryBugswichtigkeit: TIntegerField;
qryBugsbearbeiter: TIntegerField;
qryBugsversion_release: TIntegerField;
qryBugsmodul: TIntegerField;
qryBugsprojekt: TIntegerField;
qryVersionen: TADOQuery;
qryModule: TADOQuery;
LblAngemeldet: TLabel;
Label7: TLabel;
Label8: TLabel;
DBLookupComboBox4: TDBLookupComboBox;
qryBugserfasser: TIntegerField;
qryBugsversion_agenda: TIntegerField;
Label9: TLabel;
cbxErfasser: TDBLookupComboBox;
Label10: TLabel;
lkpStatus: TADOTable;
dsStatus: TDataSource;
DBLookupComboBox5: TDBLookupComboBox;
qryBugsstatus: TIntegerField;
qryBugsstatus_geaendert: TDateTimeField;
Bugs1: TMenuItem;
Wechselnzu1: TMenuItem;
lkpStatusid: TAutoIncField;
lkpStatusstatus: TStringField;
lkpStatuscolor: TIntegerField;
procedure Mitarbeiter1Click(Sender: TObject);
procedure qryBugsAfterScroll(DataSet: TDataSet);
procedure Module1Click(Sender: TObject);
procedure Projekte1Click(Sender: TObject);
procedure Versionen1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Projektwechseln1Click(Sender: TObject);
procedure qryBugsAfterInsert(DataSet: TDataSet);
procedure ber1Click(Sender: TObject);
procedure qryBugsversion_releaseValidate(Sender: TField);
procedure FormCreate(Sender: TObject);
procedure qryVersionenAfterInsert(DataSet: TDataSet);
procedure qryModuleAfterInsert(DataSet: TDataSet);
procedure btnBearbeitungsnotizClick(Sender: TObject);
procedure qryBugsBeforeCancel(DataSet: TDataSet);
procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure qryBugsstatusChange(Sender: TField);
procedure Wechselnzu1Click(Sender: TObject);
public
eingeloggtMitarbeiter: integer;
eingeloggtMitarbeiterName: string;
aktuellesProjekt: integer;
aktuellesProjektName: string;
procedure NeuFiltern;
procedure NotizHinzufuegen(color: TColor; bez: string);
end;
 
var
frmBugtracker: TfrmBugtracker;
 
implementation
 
uses Mitarbeiter, Module, Versionen, Projekte, Login, About, inifiles;
 
{$R *.dfm}
 
procedure TfrmBugtracker.qryBugsAfterInsert(DataSet: TDataSet);
begin
// Standardwerte für einen neuen Bug
qryBugs.FieldByName('wichtigkeit').AsInteger := 5; // Mitte
qryBugs.FieldByName('erstellt').AsDateTime := Now;
qryBugs.FieldByName('erfasser').AsInteger := eingeloggtMitarbeiter;
qryBugs.FieldByName('projekt').AsInteger := aktuellesProjekt;
qryBugs.FieldByName('status').AsInteger := 1; // Offen
end;
 
procedure TfrmBugtracker.qryBugsAfterScroll(DataSet: TDataSet);
var
bakEvent: TNotifyEvent;
begin
bakEvent := TrackBar1.OnChange;
TrackBar1.OnChange := nil;
try
TrackBar1.Position := qryBugs.FieldByName('wichtigkeit').AsInteger;
finally
TrackBar1.OnChange := bakEvent;
end;
end;
 
procedure TfrmBugtracker.qryBugsBeforeCancel(DataSet: TDataSet);
var
abfrage: Integer;
begin
// Tag 1 = Es wurde der "Abbrechen"-Knopf im DBNavigator gedrückt, also wollen wir keine unnötige Bestätigung
// Alles andere = Irgendwas anderes (z.B. Scrolling oder versehentlich versucht das Fenster zu schließen)
if qryBugs.Tag = 1 then exit;
 
abfrage := MessageDlg('Speichern?', mtConfirmation, mbYesNoCancel, 0);
 
if (abfrage = IDNo) or (abfrage = IDYes) or (abfrage = IDOK) then
begin
if abfrage = IDYes then
begin
if (qryBugs.state in [dsEdit, dsInsert]) then qryBugs.Post;
end;
if abfrage = IDNo then
begin
// Wir befinden uns bereits in qryBugs.Cancel, daher auskommentiert.
// if (qryBugs.state in [dsEdit, dsInsert]) then qryBugs.Cancel;
end;
end
else raise EAbort.Create('Abbruch durch Benutzer'); // Cancel geklickt
end;
 
procedure TfrmBugtracker.qryBugsstatusChange(Sender: TField);
var
col: TColor;
begin
qryBugsstatus_geaendert.AsDateTime := Now;
 
DBLookupComboBox5.KeyValue := qryBugsstatus.AsVariant; // nur benötigt, daamit wir auf DBLookupComboBox5.Text zugreifen können
col := TColor(lkpStatuscolor.AsInteger);
NotizHinzufuegen(col, DBLookupComboBox5.Text);
end;
 
procedure TfrmBugtracker.qryBugsversion_releaseValidate(Sender: TField);
begin
if qryBugs.FieldByName('status').AsInteger <> 5 then
begin
// raise Exception.Create('Vor einer Veröffentlichung muss der Bugfix erst als "Veröffentlicht" markiert werden.');
qryBugs.FieldByName('status').AsInteger := 5;
end;
end;
 
procedure TfrmBugtracker.qryModuleAfterInsert(DataSet: TDataSet);
begin
// Standardwerte für ein neues Modul
qryModule.FieldByName('projekt').AsInteger := aktuellesProjekt;
end;
 
procedure TfrmBugtracker.qryVersionenAfterInsert(DataSet: TDataSet);
begin
// Standardwerte für eine neue Version
qryVersionen.FieldByName('projekt').AsInteger := aktuellesProjekt;
end;
 
procedure TfrmBugtracker.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
if frmLogin.ShowModal = mrCancel then Close;
end;
 
procedure TfrmBugtracker.TrackBar1Change(Sender: TObject);
begin
if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
qryBugs.FieldByName('wichtigkeit').AsInteger := TrackBar1.Position;
end;
 
procedure TfrmBugtracker.Versionen1Click(Sender: TObject);
begin
frmVersionen.ShowModal;
end;
 
procedure TfrmBugtracker.Wechselnzu1Click(Sender: TObject);
var
s: string;
id, ec: integer;
begin
s := Trim(InputBox('Wechseln zu Bug', 'ID des Bugs eingeben', '0'));
if s = '' then exit;
Val(s, id, ec);
if ec <> 0 then
begin
ShowMessageFmt('"%s" ist keine gültige Bug-ID-Nummer.', [id]);
exit;
end;
qryBugs.Locate('id', id, []);
end;
 
procedure TfrmBugtracker.ber1Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;
 
procedure TfrmBugtracker.btnBearbeitungsnotizClick(Sender: TObject);
begin
NotizHinzufuegen(clOlive, 'Notiz');
end;
 
procedure TfrmBugtracker.ComboBox1Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0:
begin
// Meine offenen Aufgaben (nach Wichtigkeit)
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND (status = 1 OR status = 3) AND bearbeiter = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY wichtigkeit DESC';
end;
1:
begin
// Alle offenen Aufgaben (nach Wichtigkeit)
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND (status = 1 OR status = 3) ORDER BY wichtigkeit DESC';
end;
2:
begin
// Gelöst ohne Veröffentlichung (nach Lösungsdatum)
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND status = 4 ORDER BY status_geaendert DESC';
end;
3:
begin
// Gelöst und Veröffentlicht (nach Version und Lösungsdatum)
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND status = 5 ORDER BY status_geaendert DESC';
end;
4:
begin
// Von mir erfasste Aufgaben (nach Erfassungsdatum)
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' AND erfasser = '+IntToStr(eingeloggtMitarbeiter)+' ORDER BY erstellt DESC';
end;
5:
begin
// Alle Aufgaben (nach Eröffnungsdatum)
qryBugs.SQL.Text := 'SELECT * FROM bugs WHERE projekt = '+IntToStr(aktuellesProjekt)+' ORDER BY erstellt DESC';
end;
end;
qryBugs.Active := true;
end;
 
procedure TfrmBugtracker.DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn);
begin
if Button = nbCancel then
begin
if qryBugs.state in [dsEdit,dsInsert] then
begin
// Tag=1 soll verhindern, dass nicht gefragt wird, ob man Speichern möchte.
// Ansonsten würde diese Meldung kommen, denn ".Cancel" wird automatisch
// bei Ereignissen wie z.B. dem Scrolling aufgerufen (noch bevor
// OnBeforeScroll aufgerufen wird), bei dem man einen MBOnCloseQuery wünscht.
qryBugs.Tag := 1;
try
qryBugs.Cancel;
finally
qryBugs.Tag := 0;
end;
end;
end;
end;
 
procedure TfrmBugtracker.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
qryBugs.Cancel;
end;
 
procedure TfrmBugtracker.FormCreate(Sender: TObject);
var
ini: TMemIniFile;
begin
ini := TMemIniFile.Create('bugtracker.ini');
try
ADOConnection1.Connected := false;
ADOConnection1.ConnectionString := ini.ReadString('Database', 'ConnectionString', '');
finally
ini.Free;
end;
 
ADOConnection1.Connected := true;
qryBugs.Active := true;
tblMitarbeiter.Active := true;
qryVersionen.Active := true;
tblProjekte.Active := true;
qryModule.Active := true;
lkpStatus.Active := true;
end;
 
procedure TfrmBugtracker.Mitarbeiter1Click(Sender: TObject);
begin
frmMitarbeiter.ShowModal;
end;
 
procedure TfrmBugtracker.Module1Click(Sender: TObject);
begin
frmModule.ShowModal;
end;
 
procedure TfrmBugtracker.NeuFiltern;
begin
ComboBox1Change(ComboBox1);
 
qryModule.SQL.Text := 'SELECT * FROM module WHERE projekt = ' + IntToStr(aktuellesProjekt);
qryModule.Active := true;
 
qryVersionen.SQL.Text := 'SELECT * FROM versionen WHERE projekt = ' + IntToStr(aktuellesProjekt);
qryVersionen.Active := true;
end;
 
procedure TfrmBugtracker.NotizHinzufuegen(color: TColor; bez: string);
var
leerzeilen: integer;
umbruch: string;
prefix: string;
begin
if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
 
// Endet der Text mit zwei Zeilenabständen? Wenn nein, dann einfügen.
if Trim(DBRichEdit1.Text) <> '' then
begin
leerzeilen := 0;
if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-2, 2) = #13#10 then Inc(leerzeilen); // letzte Zeile
if Copy(DBRichEdit1.Text, 1+Length(DBRichEdit1.Text)-4, 2) = #13#10 then Inc(leerzeilen); // Vorletzte Zeile
case leerzeilen of
0: umbruch := #13#10#13#10;
1: umbruch := #13#10;
2: umbruch := '';
end;
end
else
begin
umbruch := '';
end;
 
DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
DBRichEdit1.SelText := umbruch;
 
DBRichEdit1.SelAttributes.Size := 13;
DBRichEdit1.SelAttributes.Color := color;
DBRichEdit1.SelAttributes.Style := [fsUnderline];
if Trim(bez) <> '' then
prefix := Trim(bez) + ' - '
else
prefix := '';
DBRichEdit1.SelText := prefix + eingeloggtMitarbeiterName + ' ' + FormatDateTime('dd.mm.yyyy hh:nn', Now); // DateTimeToStr(Now);
 
DBRichEdit1.SelAttributes.Size := 10;
DBRichEdit1.SelAttributes.Color := clWindowText;
DBRichEdit1.SelAttributes.Style := [];
DBRichEdit1.SelText := #13#10 {+ '<Hier Text eingeben>'};
 
// Ans Ende scrollen
DBRichEdit1.SetFocus;
DBRichEdit1.SelStart := DBRichEdit1.GetTextLen;
DBRichEdit1.Perform(EM_SCROLLCARET, 0, 0);
end;
 
procedure TfrmBugtracker.Projekte1Click(Sender: TObject);
begin
frmProjekte.ShowModal;
end;
 
procedure TfrmBugtracker.Projektwechseln1Click(Sender: TObject);
begin
frmLogin.ShowModal;
end;
 
end.
/trunk/BugtrackerMain.dfm
0,0 → 1,545
object frmBugtracker: TfrmBugtracker
Left = 0
Top = 0
Align = alClient
Caption = 'ViaThinkSoft Bugtracker f'#252'r Windows'
ClientHeight = 596
ClientWidth = 763
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
Position = poScreenCenter
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 249
Top = 0
Height = 596
ExplicitLeft = 0
ExplicitTop = 136
ExplicitHeight = 100
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 249
Height = 596
Align = alLeft
TabOrder = 0
DesignSize = (
249
596)
object DBGrid1: TDBGrid
Left = 8
Top = 35
Width = 233
Height = 504
Anchors = [akLeft, akTop, akRight, akBottom]
DataSource = dsBugs
ReadOnly = True
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
Columns = <
item
Expanded = False
FieldName = 'id'
Width = 46
Visible = True
end
item
Expanded = False
FieldName = 'titel'
Width = 111
Visible = True
end
item
Expanded = False
FieldName = 'wichtigkeit'
Width = 36
Visible = True
end>
end
object ComboBox1: TComboBox
Left = 8
Top = 8
Width = 233
Height = 21
Style = csDropDownList
Anchors = [akLeft, akTop, akRight]
ItemHeight = 13
TabOrder = 1
OnChange = ComboBox1Change
Items.Strings = (
'Meine offenen Aufgaben (nach Wichtigkeit)'
'Alle offenen Aufgaben (nach Wichtigkeit)'
'Gel'#246'st ohne Ver'#246'ffentlichung (nach L'#246'sungsdatum)'
'Gel'#246'st und Ver'#246'ffentlicht (nach Version und L'#246'sungsdatum)'
'Von mir erfasste Aufgaben (nach Erfassungsdatum)'
'Alle Aufgaben (nach Er'#246'ffnungsdatum)')
end
object DBNavigator2: TDBNavigator
Left = 11
Top = 554
Width = 232
Height = 25
DataSource = dsBugs
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]
Anchors = [akLeft, akRight, akBottom]
TabOrder = 2
end
end
object Panel2: TPanel
Left = 252
Top = 0
Width = 511
Height = 596
Align = alClient
TabOrder = 1
DesignSize = (
511
596)
object Label1: TLabel
Left = 17
Top = 101
Width = 50
Height = 13
Caption = 'Bearbeiter'
end
object Label2: TLabel
Left = 17
Top = 195
Width = 20
Height = 13
Caption = 'Titel'
end
object Label3: TLabel
Left = 240
Top = 53
Width = 33
Height = 13
Caption = 'Erstellt'
end
object Label4: TLabel
Left = 240
Top = 101
Width = 31
Height = 13
BiDiMode = bdLeftToRight
Caption = 'Status'
ParentBiDiMode = False
end
object Label5: TLabel
Left = 17
Top = 147
Width = 28
Height = 13
Caption = 'Modul'
end
object Label6: TLabel
Left = 240
Top = 216
Width = 119
Height = 13
Caption = 'Ver'#246'ffentlicht als Version'
end
object LblAngemeldet: TLabel
Left = 3
Top = 0
Width = 83
Height = 13
Caption = 'Nicht angemeldet'
end
object Label7: TLabel
Left = 250
Top = 0
Width = 46
Height = 13
Caption = 'Unwichtig'
end
object Label8: TLabel
Left = 366
Top = 0
Width = 34
Height = 13
Alignment = taRightJustify
Caption = 'Kritisch'
end
object Label9: TLabel
Left = 240
Top = 170
Width = 92
Height = 13
Caption = 'Geplant f'#252'r Version'
end
object Label10: TLabel
Left = 17
Top = 53
Width = 40
Height = 13
Caption = 'Erfasser'
end
object DBNavigator1: TDBNavigator
Left = 15
Top = 19
Width = 184
Height = 25
DataSource = dsBugs
VisibleButtons = [nbInsert, nbDelete, nbPost, nbCancel]
TabOrder = 0
BeforeAction = DBNavigator1BeforeAction
end
object DBRichEdit1: TDBRichEdit
Left = 15
Top = 280
Width = 483
Height = 299
Anchors = [akLeft, akTop, akRight, akBottom]
DataField = 'beschreibung'
DataSource = dsBugs
TabOrder = 10
end
object DBEdit1: TDBEdit
Left = 17
Top = 213
Width = 186
Height = 21
DataField = 'titel'
DataSource = dsBugs
TabOrder = 6
end
object DBLookupComboBox1: TDBLookupComboBox
Left = 17
Top = 120
Width = 186
Height = 21
DataField = 'bearbeiter'
DataSource = dsBugs
KeyField = 'id'
ListField = 'name'
ListSource = dsMitarbeiter
NullValueKey = 46
TabOrder = 1
end
object DBEdit2: TDBEdit
Left = 240
Top = 72
Width = 155
Height = 21
TabStop = False
Color = clBtnFace
DataField = 'erstellt'
DataSource = dsBugs
ReadOnly = True
TabOrder = 8
end
object DBEdit3: TDBEdit
Left = 240
Top = 141
Width = 155
Height = 21
TabStop = False
Color = clBtnFace
DataField = 'status_geaendert'
DataSource = dsBugs
ReadOnly = True
TabOrder = 3
end
object DBLookupComboBox2: TDBLookupComboBox
Left = 17
Top = 168
Width = 186
Height = 21
DataField = 'modul'
DataSource = dsBugs
KeyField = 'id'
ListField = 'modul'
ListSource = dsModule
NullValueKey = 46
TabOrder = 4
end
object DBLookupComboBox3: TDBLookupComboBox
Left = 240
Top = 235
Width = 155
Height = 21
DataField = 'version_release'
DataSource = dsBugs
KeyField = 'id'
ListField = 'version'
ListSource = dsVersionen
TabOrder = 7
end
object TrackBar1: TTrackBar
Left = 245
Top = 12
Width = 164
Height = 45
Position = 5
TabOrder = 11
OnChange = TrackBar1Change
end
object btnBearbeitungsnotiz: TButton
Left = 17
Top = 240
Width = 185
Height = 25
Caption = 'Notiz hinzuf'#252'gen'
TabOrder = 9
OnClick = btnBearbeitungsnotizClick
end
object DBLookupComboBox4: TDBLookupComboBox
Left = 240
Top = 189
Width = 155
Height = 21
DataField = 'version_agenda'
DataSource = dsBugs
KeyField = 'id'
ListField = 'version'
ListSource = dsVersionen
TabOrder = 5
end
object cbxErfasser: TDBLookupComboBox
Left = 17
Top = 72
Width = 186
Height = 21
Color = clBtnFace
DataField = 'erfasser'
DataSource = dsBugs
KeyField = 'id'
ListField = 'name'
ListSource = dsMitarbeiter
NullValueKey = 46
ReadOnly = True
TabOrder = 12
end
object DBLookupComboBox5: TDBLookupComboBox
Left = 240
Top = 120
Width = 155
Height = 21
DataField = 'status'
DataSource = dsBugs
KeyField = 'id'
ListField = 'status'
ListSource = dsStatus
TabOrder = 2
end
end
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
'fo=False;Initial Catalog=WULI;Data Source=GREINER\CORA2012,49001'
LoginPrompt = False
Provider = 'SQLOLEDB.1'
Left = 104
Top = 344
end
object dsBugs: TDataSource
DataSet = qryBugs
Left = 168
Top = 312
end
object tblMitarbeiter: TADOTable
Active = True
Connection = ADOConnection1
CursorType = ctStatic
TableName = 'mitarbeiter'
Left = 208
Top = 344
end
object dsMitarbeiter: TDataSource
DataSet = tblMitarbeiter
Left = 208
Top = 312
end
object MainMenu1: TMainMenu
Left = 88
Top = 216
object Stammdaten1: TMenuItem
Caption = 'Stammdaten'
object Mitarbeiter1: TMenuItem
Caption = 'Mitarbeiter'
OnClick = Mitarbeiter1Click
end
object Projekte1: TMenuItem
Caption = 'Projekte'
OnClick = Projekte1Click
end
object Module1: TMenuItem
Caption = 'Module'
OnClick = Module1Click
end
object Versionen1: TMenuItem
Caption = 'Versionen'
OnClick = Versionen1Click
end
end
object Bugs1: TMenuItem
Caption = 'Bugs'
object Wechselnzu1: TMenuItem
Caption = 'Wechseln zu...'
OnClick = Wechselnzu1Click
end
end
object Projektwechseln1: TMenuItem
Caption = 'Projekt wechseln'
OnClick = Projektwechseln1Click
end
object Hilfe1: TMenuItem
Caption = 'Hilfe'
object ber1: TMenuItem
Caption = #220'ber'
OnClick = ber1Click
end
end
end
object XPManifest1: TXPManifest
Left = 48
Top = 216
end
object qryBugs: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
AfterInsert = qryBugsAfterInsert
BeforeCancel = qryBugsBeforeCancel
AfterScroll = qryBugsAfterScroll
Parameters = <>
SQL.Strings = (
'SELECT * FROM bugs order by wichtigkeit')
Left = 168
Top = 344
object qryBugsid: TAutoIncField
FieldName = 'id'
ReadOnly = True
end
object qryBugstitel: TStringField
FieldName = 'titel'
Size = 255
end
object qryBugsbeschreibung: TMemoField
FieldName = 'beschreibung'
BlobType = ftMemo
end
object qryBugserstellt: TDateTimeField
FieldName = 'erstellt'
end
object qryBugswichtigkeit: TIntegerField
FieldName = 'wichtigkeit'
end
object qryBugsbearbeiter: TIntegerField
FieldName = 'bearbeiter'
end
object qryBugsversion_release: TIntegerField
FieldName = 'version_release'
OnValidate = qryBugsversion_releaseValidate
end
object qryBugsmodul: TIntegerField
FieldName = 'modul'
end
object qryBugsprojekt: TIntegerField
FieldName = 'projekt'
end
object qryBugserfasser: TIntegerField
FieldName = 'erfasser'
end
object qryBugsversion_agenda: TIntegerField
FieldName = 'version_agenda'
end
object qryBugsstatus: TIntegerField
FieldName = 'status'
OnChange = qryBugsstatusChange
end
object qryBugsstatus_geaendert: TDateTimeField
FieldName = 'status_geaendert'
end
end
object dsVersionen: TDataSource
DataSet = qryVersionen
Left = 240
Top = 312
end
object tblProjekte: TADOTable
Active = True
Connection = ADOConnection1
CursorType = ctStatic
TableName = 'projekte'
Left = 272
Top = 344
end
object dsProjekte: TDataSource
DataSet = tblProjekte
Left = 272
Top = 312
end
object dsModule: TDataSource
DataSet = qryModule
Left = 304
Top = 312
end
object Timer1: TTimer
OnTimer = Timer1Timer
Left = 128
Top = 216
end
object qryVersionen: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
AfterInsert = qryVersionenAfterInsert
Parameters = <>
SQL.Strings = (
'SELECT * FROM versionen')
Left = 240
Top = 344
end
object qryModule: TADOQuery
Active = True
Connection = ADOConnection1
CursorType = ctStatic
AfterInsert = qryModuleAfterInsert
Parameters = <>
SQL.Strings = (
'SELECT * FROM module')
Left = 304
Top = 344
end
object lkpStatus: TADOTable
Active = True
Connection = ADOConnection1
CursorType = ctStatic
TableName = 'lkp_status'
Left = 344
Top = 344
object lkpStatusid: TAutoIncField
FieldName = 'id'
ReadOnly = True
end
object lkpStatusstatus: TStringField
FieldName = 'status'
Size = 255
end
object lkpStatuscolor: TIntegerField
FieldName = 'color'
end
end
object dsStatus: TDataSource
DataSet = lkpStatus
Left = 344
Top = 312
end
end
/trunk/bugtracker_mssql.sql
0,0 → 1,53
 
CREATE TABLE [dbo].[bugs](
[id] [int] IDENTITY(1,1) NOT NULL,
[titel] [varchar](255) NULL,
[beschreibung] [text] NULL,
[erstellt] [datetime] NOT NULL,
[wichtigkeit] [int] NOT NULL,
[erfasser] [int] NOT NULL,
[bearbeiter] [int] NULL,
[status] [int] NOT NULL,
[status_geandert] [datetime] NULL,
[version_release] [int] NULL,
[version_agenda] [int] NULL,
[modul] [int] NULL,
[projekt] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ALTER TABLE [dbo].[bugs] ADD CONSTRAINT [DF_bugs_wichtigkeit] DEFAULT ((5)) FOR [wichtigkeit]
ALTER TABLE [dbo].[bugs] ADD CONSTRAINT [DF_bugs_status] DEFAULT ((1)) FOR [status]
 
CREATE TABLE [dbo].[mitarbeiter](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](255) NULL
) ON [PRIMARY]
 
CREATE TABLE [dbo].[module](
[id] [int] IDENTITY(1,1) NOT NULL,
[modul] [varchar](255) NULL,
[projekt] [int] NOT NULL
) ON [PRIMARY]
 
CREATE TABLE [dbo].[projekte](
[id] [int] IDENTITY(1,1) NOT NULL,
[projekt] [varchar](255) NULL
) ON [PRIMARY]
 
CREATE TABLE [dbo].[versionen](
[id] [int] IDENTITY(1,1) NOT NULL,
[version] [varchar](255) NULL,
[projekt] [int] NOT NULL
) ON [PRIMARY]
 
CREATE TABLE [dbo].[lkp_status](
[id] [int] IDENTITY(1,1) NOT NULL,
[status] [varchar](255) NULL,
[color] [int] NOT NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[lkp_status] ADD CONSTRAINT [DF_lkp_status_color] DEFAULT ((0))
 
INSERT INTO [lkp_status] ([status]) VALUES ('Offen', 255);
INSERT INTO [lkp_status] ([status]) VALUES ('Abgelehnt', 128);
INSERT INTO [lkp_status] ([status]) VALUES ('In Arbeit', 8388736);
INSERT INTO [lkp_status] ([status]) VALUES ('Abgeschlossen', 8421376);
INSERT INTO [lkp_status] ([status]) VALUES ('Veröffentlicht', 32768);
/trunk/bugtracker_mysql.sql
0,0 → 1,131

--
-- Tabellenstruktur für Tabelle `bugs`
--
 
CREATE TABLE IF NOT EXISTS `bugs` (
`id` int(11) NOT NULL,
`titel` varchar(255) NOT NULL,
`beschreibung` longtext NOT NULL,
`erstellt` datetime DEFAULT NULL,
`wichtigkeit` int(11) NOT NULL DEFAULT '5',
`erfasser` int(11) DEFAULT NOT NULL,
`bearbeiter` int(11) DEFAULT NULL,
`status` int(11) NOT NULL DEFAULT '1',
`status_geandert` datetime DEFAULT NULL,
`version_release` int(11) NOT NULL,
`version_agenda` int(11) NOT NULL,
`modul` int(11) NOT NULL,
`projekt` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
 
-- --------------------------------------------------------
 
--
-- Tabellenstruktur für Tabelle `mitarbeiter`
--
 
CREATE TABLE IF NOT EXISTS `mitarbeiter` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
 
-- --------------------------------------------------------
 
--
-- Tabellenstruktur für Tabelle `module`
--
 
CREATE TABLE IF NOT EXISTS `module` (
`id` int(11) NOT NULL,
`projekt` int(11) NOT NULL,
`modul` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
 
-- --------------------------------------------------------
 
--
-- Tabellenstruktur für Tabelle `projekte`
--
 
CREATE TABLE IF NOT EXISTS `projekte` (
`id` int(11) NOT NULL,
`projekt` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
 
-- --------------------------------------------------------
 
--
-- Tabellenstruktur für Tabelle `versionen`
--
 
CREATE TABLE IF NOT EXISTS `versionen` (
`id` int(11) NOT NULL,
`version` varchar(255) NOT NULL,
`projekt` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
 
--
-- Tabellenstruktur für Tabelle `lkp_status`
--
 
CREATE TABLE IF NOT EXISTS `lkp_status` (
`id` int(11) NOT NULL,
`status` varchar(255) NOT NULL,
`color` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
 
--
-- Indexes for dumped tables
--
 
ALTER TABLE `bugs`
ADD PRIMARY KEY (`id`);
 
ALTER TABLE `mitarbeiter`
ADD PRIMARY KEY (`id`);
 
ALTER TABLE `module`
ADD PRIMARY KEY (`id`);
 
ALTER TABLE `projekte`
ADD PRIMARY KEY (`id`);
 
ALTER TABLE `versionen`
ADD PRIMARY KEY (`id`);
 
ALTER TABLE `lkp_status`
ADD PRIMARY KEY (`id`);
 
--
-- AUTO_INCREMENT for dumped tables
--
 
ALTER TABLE `bugs`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
 
ALTER TABLE `mitarbeiter`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
 
ALTER TABLE `module`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
 
ALTER TABLE `projekte`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
 
ALTER TABLE `versionen`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
 
ALTER TABLE `lkp_status`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
 
--
-- Daten für Tabelle `lkp_status`
--
 
INSERT INTO `lkp_status` (`id`, `status`) VALUES
(1, 'Offen', 255),
(2, 'Abgelehnt', 128),
(3, 'In Arbeit', 8388736),
(4, 'Abgeschlossen', 8421376),
(5, 'Veröffentlicht', 32768);
/trunk/Bugtracker.dproj
0,0 → 1,90
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{d9325f5e-2b75-4c5f-b683-9907a01f0c72}</ProjectGuid>
<MainSource>Bugtracker.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>Bugtracker.exe</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_Define>DEBUG</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType />
<BorlandProject>
<BorlandProject xmlns=""> <Delphi.Personality> <Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Bugtracker für Windows</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">WuLi</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">(C) 2016 ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">Bugtracker.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">ViaThinkSoft Bugtracker für Windows</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments">www.daniel-marschall.de</VersionInfoKeys>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">Bugtracker.dpr</Source>
</Source>
</Delphi.Personality> </BorlandProject></BorlandProject>
</ProjectExtensions>
<ItemGroup />
<ItemGroup>
<DelphiCompile Include="Bugtracker.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="About.pas">
<Form>AboutBox</Form>
</DCCReference>
<DCCReference Include="BugtrackerMain.pas">
<Form>frmBugtracker</Form>
</DCCReference>
<DCCReference Include="Login.pas">
<Form>frmLogin</Form>
</DCCReference>
<DCCReference Include="Mitarbeiter.pas">
<Form>frmMitarbeiter</Form>
</DCCReference>
<DCCReference Include="Module.pas">
<Form>frmModule</Form>
</DCCReference>
<DCCReference Include="Projekte.pas">
<Form>frmProjekte</Form>
</DCCReference>
<DCCReference Include="Versionen.pas">
<Form>frmVersionen</Form>
</DCCReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
</Project>
/trunk/Mitarbeiter.dfm
0,0 → 1,47
object frmMitarbeiter: TfrmMitarbeiter
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Mitarbeiter'
ClientHeight = 280
ClientWidth = 273
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 8
Top = 8
Width = 257
Height = 233
DataSource = frmBugtracker.dsMitarbeiter
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
Columns = <
item
Expanded = False
FieldName = 'name'
Visible = True
end>
end
object DBNavigator1: TDBNavigator
Left = 8
Top = 247
Width = 256
Height = 25
DataSource = frmBugtracker.dsMitarbeiter
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbPost, nbCancel]
TabOrder = 1
end
end
/trunk/Mitarbeiter.pas
0,0 → 1,29
unit Mitarbeiter;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls;
 
type
TfrmMitarbeiter = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
 
var
frmMitarbeiter: TfrmMitarbeiter;
 
implementation
 
{$R *.dfm}
 
uses
BugtrackerMain;
 
end.
/trunk/Module.dfm
0,0 → 1,47
object frmModule: TfrmModule
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Module'
ClientHeight = 280
ClientWidth = 273
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 8
Top = 8
Width = 257
Height = 233
DataSource = frmBugtracker.dsModule
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
Columns = <
item
Expanded = False
FieldName = 'modul'
Visible = True
end>
end
object DBNavigator1: TDBNavigator
Left = 8
Top = 247
Width = 256
Height = 25
DataSource = frmBugtracker.dsModule
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbPost, nbCancel]
TabOrder = 1
end
end
/trunk/Module.pas
0,0 → 1,29
unit Module;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls;
 
type
TfrmModule = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
 
var
frmModule: TfrmModule;
 
implementation
 
{$R *.dfm}
 
uses
BugtrackerMain;
 
end.
/trunk/Projekte.dfm
0,0 → 1,47
object frmProjekte: TfrmProjekte
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Projekte'
ClientHeight = 280
ClientWidth = 273
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 8
Top = 8
Width = 257
Height = 233
DataSource = frmBugtracker.dsProjekte
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
Columns = <
item
Expanded = False
FieldName = 'projekt'
Visible = True
end>
end
object DBNavigator1: TDBNavigator
Left = 8
Top = 247
Width = 256
Height = 25
DataSource = frmBugtracker.dsProjekte
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbPost, nbCancel]
TabOrder = 1
end
end
/trunk/Projekte.pas
0,0 → 1,29
unit Projekte;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls;
 
type
TfrmProjekte = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
 
var
frmProjekte: TfrmProjekte;
 
implementation
 
{$R *.dfm}
 
uses
BugtrackerMain;
 
end.
/trunk/Versionen.dfm
0,0 → 1,47
object frmVersionen: TfrmVersionen
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Versionen'
ClientHeight = 280
ClientWidth = 273
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 8
Top = 8
Width = 257
Height = 233
DataSource = frmBugtracker.dsVersionen
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
Columns = <
item
Expanded = False
FieldName = 'version'
Visible = True
end>
end
object DBNavigator1: TDBNavigator
Left = 8
Top = 247
Width = 256
Height = 25
DataSource = frmBugtracker.dsVersionen
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbPost, nbCancel]
TabOrder = 1
end
end
/trunk/Versionen.pas
0,0 → 1,29
unit Versionen;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls;
 
type
TfrmVersionen = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
 
var
frmVersionen: TfrmVersionen;
 
implementation
 
{$R *.dfm}
 
uses
BugtrackerMain;
 
end.
/trunk/bugtracker.ini
0,0 → 1,7
[Database]
 
; Daniel Marschall Privat
;ConnectionString=Provider=MSDASQL.1;Persist Security Info=False;Data Source=MySQL RAS;Initial Catalog=bugtracker;
 
; HickelSOFT
ConnectionString=Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=WULI;Data Source=GREINER\CORA2012,49001
/trunk/About.dfm
0,0 → 1,104
object AboutBox: TAboutBox
Left = 200
Top = 108
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'Info '#252'ber'
ClientHeight = 213
ClientWidth = 298
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poMainFormCenter
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 8
Top = 8
Width = 281
Height = 161
BevelInner = bvRaised
BevelOuter = bvLowered
ParentColor = True
TabOrder = 0
object ProgramIcon: TImage
Left = 8
Top = 8
Width = 65
Height = 57
Picture.Data = {
07544269746D617076020000424D760200000000000076000000280000002000
0000200000000100040000000000000200000000000000000000100000000000
000000000000000080000080000000808000800000008000800080800000C0C0
C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787E
EEE00788787878878887803F3088887EEEE00788887888878887803F3088887E
EEE00877888887788888703F308887EEEEE00888777778888888037883088888
8EE007777777777777703787883087777EE00888888888888803787FF8830888
888008888888888880378777778830888880077777777788037873F3F3F87808
88E00888888888803787FFFFFFFF8830EEE00887777778800001111111111100
EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EE
EEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EE
EEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEE
EEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEE
EEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEE
EEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEE
EEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEE
EEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00000000000000000000000000000
0000}
Stretch = True
IsControl = True
end
object ProductName: TLabel
Left = 88
Top = 16
Width = 178
Height = 13
Caption = 'ViaThinkSoft Bugtracker f'#252'r Windows'
IsControl = True
end
object Version: TLabel
Left = 88
Top = 40
Width = 53
Height = 13
Caption = 'Version 0.1'
IsControl = True
end
object Copyright: TLabel
Left = 8
Top = 80
Width = 135
Height = 13
Caption = 'Copyright 2016 ViaThinkSoft'
IsControl = True
end
object Comments: TLabel
Left = 8
Top = 104
Width = 258
Height = 52
AutoSize = False
Caption = 'Entwickelt von Daniel Marschall, www.daniel-marschall.de'
WordWrap = True
IsControl = True
end
end
object OKButton: TButton
Left = 111
Top = 180
Width = 75
Height = 25
Cancel = True
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 1
end
end
/trunk/Login.dfm
0,0 → 1,111
object frmLogin: TfrmLogin
Left = 0
Top = 0
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'ViaThinkSoft Bugtracker f'#252'r Windows'
ClientHeight = 385
ClientWidth = 298
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 32
Top = 24
Width = 233
Height = 33
AutoSize = False
Caption = 'Wilkommen'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -27
Font.Name = 'Tahoma'
Font.Style = [fsBold, fsItalic]
ParentFont = False
end
object GroupBox1: TGroupBox
Left = 32
Top = 80
Width = 233
Height = 105
Caption = 'Wer sind Sie?'
TabOrder = 0
object Label2: TLabel
Left = 98
Top = 59
Width = 103
Height = 13
Cursor = crHandPoint
Alignment = taRightJustify
Caption = 'Mitarbeiter verwalten'
Font.Charset = DEFAULT_CHARSET
Font.Color = clHotLight
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsUnderline]
ParentFont = False
OnClick = Label2Click
end
object cbxMitarbeiter: TDBLookupComboBox
Left = 24
Top = 32
Width = 177
Height = 21
KeyField = 'id'
ListField = 'name'
ListSource = frmBugtracker.dsMitarbeiter
TabOrder = 0
end
end
object GroupBox2: TGroupBox
Left = 32
Top = 200
Width = 233
Height = 105
Caption = 'An was m'#246'chten Sie arbeiten?'
TabOrder = 1
object Label3: TLabel
Left = 110
Top = 59
Width = 91
Height = 13
Cursor = crHandPoint
Alignment = taRightJustify
Caption = 'Projekte verwalten'
Font.Charset = DEFAULT_CHARSET
Font.Color = clHotLight
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = [fsUnderline]
ParentFont = False
OnClick = Label3Click
end
object cbxProjekt: TDBLookupComboBox
Left = 24
Top = 32
Width = 177
Height = 21
KeyField = 'id'
ListField = 'projekt'
ListSource = frmBugtracker.dsProjekte
TabOrder = 0
end
end
object Button1: TButton
Left = 94
Top = 327
Width = 115
Height = 36
Caption = 'Los geht'#39's'
Default = True
TabOrder = 2
OnClick = Button1Click
end
end
/trunk/Login.pas
0,0 → 1,73
unit Login;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, DB, DBClient;
 
type
TfrmLogin = class(TForm)
Label1: TLabel;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
cbxMitarbeiter: TDBLookupComboBox;
cbxProjekt: TDBLookupComboBox;
procedure Label2Click(Sender: TObject);
procedure Label3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
 
var
frmLogin: TfrmLogin;
 
implementation
 
uses
BugtrackerMain, Mitarbeiter, Projekte;
 
{$R *.dfm}
 
procedure TfrmLogin.Button1Click(Sender: TObject);
begin
if VarIsNull(cbxMitarbeiter.KeyValue) then
begin
ShowMessage('Bitte Mitarbeiter auswählen.');
cbxMitarbeiter.SetFocus;
Exit;
end;
if VarIsNull(cbxProjekt.KeyValue) then
begin
ShowMessage('Bitte Projekt auswählen.');
cbxProjekt.SetFocus;
Exit;
end;
frmBugtracker.eingeloggtMitarbeiter := cbxMitarbeiter.KeyValue;
frmBugtracker.eingeloggtMitarbeiterName := cbxMitarbeiter.Text;
frmBugtracker.aktuellesProjekt := cbxProjekt.KeyValue;
frmBugtracker.aktuellesProjektName := cbxProjekt.Text;
 
frmBugtracker.LblAngemeldet.Caption := Format('Eingeloggt: %s, Projekt: %s', [frmBugtracker.eingeloggtMitarbeiterName, frmBugtracker.aktuellesProjektName]);
frmBugtracker.NeuFiltern;
 
ModalResult := mrOk; // Das schließt den Dialog
end;
 
procedure TfrmLogin.Label2Click(Sender: TObject);
begin
frmMitarbeiter.ShowModal;
end;
 
procedure TfrmLogin.Label3Click(Sender: TObject);
begin
frmProjekte.ShowModal;
end;
 
end.
/trunk/Bugtracker.bdsproj
0,0 → 1,175
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{D9325F5E-2B75-4C5F-B683-9907A01F0C72}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">Bugtracker.dpr</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">1</Compiler>
<Compiler Name="D">1</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">0</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">1</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">1</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription"></Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Bugtracker für Windows</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">WuLi</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">(C) 2016 ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">Bugtracker.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">ViaThinkSoft Bugtracker für Windows</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments">www.daniel-marschall.de</VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>
/trunk/Bugtracker.cfg
0,0 → 1,38
-$A8
-$B-
-$C+
-$D+
-$E-
-$F-
-$G+
-$H+
-$I+
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T-
-$U-
-$V+
-$W-
-$X+
-$YD
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00400000
-LE"C:\Users\user\Documents\Borland Studio-Projekte\Bpl"
-LN"C:\Users\user\Documents\Borland Studio-Projekte\Bpl"
-w-UNSAFE_TYPE
-w-UNSAFE_CODE
-w-UNSAFE_CAST
/trunk/Bugtracker.dpr
0,0 → 1,25
program Bugtracker;
 
uses
Forms,
BugtrackerMain in 'BugtrackerMain.pas' {frmBugtracker},
Mitarbeiter in 'Mitarbeiter.pas' {frmMitarbeiter},
Versionen in 'Versionen.pas' {frmVersionen},
Module in 'Module.pas' {frmModule},
Projekte in 'Projekte.pas' {frmProjekte},
Login in 'Login.pas' {frmLogin},
About in 'About.pas' {AboutBox};
 
{$R *.res}
 
begin
Application.Initialize;
Application.CreateForm(TfrmBugtracker, frmBugtracker);
Application.CreateForm(TfrmMitarbeiter, frmMitarbeiter);
Application.CreateForm(TfrmVersionen, frmVersionen);
Application.CreateForm(TfrmModule, frmModule);
Application.CreateForm(TfrmProjekte, frmProjekte);
Application.CreateForm(TfrmLogin, frmLogin);
Application.CreateForm(TAboutBox, AboutBox);
Application.Run;
end.
/trunk/Bugtracker.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/About.pas
0,0 → 1,31
unit About;
 
interface
 
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
 
type
TAboutBox = class(TForm)
Panel1: TPanel;
ProgramIcon: TImage;
ProductName: TLabel;
Version: TLabel;
Copyright: TLabel;
Comments: TLabel;
OKButton: TButton;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
 
var
AboutBox: TAboutBox;
 
implementation
 
{$R *.dfm}
 
end.
/trunk/DBDateEdit.txt
0,0 → 1,14
 
procedure TForm1.qryBugsAfterScroll(DataSet: TDataSet);
begin
DateTimePicker1.DateTime := qryBugs.FieldByName('fixdatum').AsDateTime;
end;
 
procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
LockWindowUpdate(DBGrid1.Handle);
if not (qryBugs.State in [dsEdit, dsInsert]) then qryBugs.Edit;
qryBugs.FieldByName('fixdatum').AsDateTime := DateTimePicker1.DateTime;
LockWindowUpdate(0);
end;
 
/trunk/.
Property changes:
Added: svn:ignore
+*.dcu
+*.exe
+__history
+*.local
+*.identcache