unit u_groups; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, fpjson, u_api; type { TGroupManagerForm } TGroupManagerForm = class(TForm) btnAdd: TButton; btnClose: TButton; btnDelete: TButton; edtNewGroup: TEdit; Label1: TLabel; StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private FUserID: string; FSession: string; FGroups: TJSONArray; procedure LoadGroups; procedure UpdateGrid; procedure OnAddClick(Sender: TObject); procedure OnDeleteClick(Sender: TObject); procedure OnCloseClick(Sender: TObject); public constructor Create(AOwner: TComponent; const UserID, Session: string); reintroduce; end; implementation {$R *.lfm} { TGroupManagerForm } constructor TGroupManagerForm.Create(AOwner: TComponent; const UserID, Session: string); begin inherited Create(AOwner); FUserID := UserID; FSession := Session; Caption := 'Gruppenverwaltung'; Width := 500; Height := 400; Position := poScreenCenter; end; procedure TGroupManagerForm.FormCreate(Sender: TObject); begin StringGrid1.ColCount := 2; StringGrid1.RowCount := 1; StringGrid1.FixedCols := 0; StringGrid1.Cells[0, 0] := 'Gruppenname'; StringGrid1.Cells[1, 0] := ''; StringGrid1.ColWidths[0] := 380; StringGrid1.ColWidths[1] := 50; // Buttons manuell verbinden btnAdd.OnClick := @OnAddClick; btnDelete.OnClick := @OnDeleteClick; btnClose.OnClick := @OnCloseClick; end; procedure TGroupManagerForm.FormShow(Sender: TObject); begin LoadGroups; end; procedure TGroupManagerForm.LoadGroups; begin if Assigned(FGroups) then FGroups.Free; FGroups := GetGroups(FUserID, FSession); UpdateGrid; end; procedure TGroupManagerForm.UpdateGrid; var i: Integer; Group: TJSONObject; begin if not Assigned(FGroups) then begin StringGrid1.RowCount := 1; Exit; end; StringGrid1.RowCount := FGroups.Count + 1; for i := 0 to FGroups.Count - 1 do begin Group := TJSONObject(FGroups.Objects[i]); StringGrid1.Cells[0, i + 1] := Group.Get('name', ''); end; end; procedure TGroupManagerForm.OnAddClick(Sender: TObject); var GroupName: string; begin GroupName := Trim(edtNewGroup.Text); if GroupName = '' then begin ShowMessage('Bitte Gruppennamen eingeben'); Exit; end; if CreateGroup(FUserID, FSession, GroupName) then begin edtNewGroup.Text := ''; LoadGroups; end else ShowMessage('Fehler beim Erstellen der Gruppe'); end; procedure TGroupManagerForm.OnDeleteClick(Sender: TObject); var Row: Integer; GroupName: string; GroupID: Integer; begin Row := StringGrid1.Row; if Row < 1 then Exit; GroupName := StringGrid1.Cells[0, Row]; GroupID := 0; if Assigned(FGroups) and (Row - 1 < FGroups.Count) then GroupID := TJSONObject(FGroups.Objects[Row-1]).Get('gruppeID', 0); if GroupID = 0 then begin ShowMessage('Gruppe nicht gefunden'); Exit; end; if MessageDlg('Gruppe löschen', Format('Möchten Sie "%s" wirklich löschen?', [GroupName]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin if DeleteGroup(FUserID, FSession, GroupID) then LoadGroups else ShowMessage('Fehler beim Löschen der Gruppe'); end; end; procedure TGroupManagerForm.OnCloseClick(Sender: TObject); begin Close; end; end.