unit FirstSampleServerMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uROPoweredByRemObjectsButton, Grids, ValEdit, uROClient, uROBinMessage, uROServer, uROIndyTCPServer, uROIndyHTTPServer, StdCtrls; type TFirstSampleServerMainForm = class(TForm) ValueListEditor: TValueListEditor; ROServer: TROIndyHTTPServer; BinMessage: TROBinMessage; Memo1: TMemo; AddButton: TButton; DeleteButton: TButton; ROPoweredByRemObjectsButton: TROPoweredByRemObjectsButton; procedure FormCreate(Sender: TObject); procedure DeleteButtonClick(Sender: TObject); procedure AddButtonClick(Sender: TObject); procedure ValueListEditorValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: string); procedure FormDestroy(Sender: TObject); procedure ValueListEditorStringsChange(Sender: TObject); private StrList: TStringList; { Private declarations } public { Public declarations } MultiReadSingleWriter: TMultiReadExclusiveWriteSynchronizer; end; var FirstSampleServerMainForm: TFirstSampleServerMainForm; implementation {$R *.dfm} procedure TFirstSampleServerMainForm.FormCreate(Sender: TObject); begin ROServer.Active := true; StrList := TStringList.Create; StrList.Assign(ValueListEditor.Strings); MultiReadSingleWriter := TMultiReadExclusiveWriteSynchronizer.Create; end; procedure TFirstSampleServerMainForm.DeleteButtonClick(Sender: TObject); var fRect: TGridRect; begin ValueListEditor.RestoreCurrentRow; fRect := ValueListEditor.Selection; if ValueListEditor.Keys[fRect.Top] = '' then Exit; ValueListEditor.DeleteRow(Frect.Top); ActiveControl := ValueListEditor; end; procedure TFirstSampleServerMainForm.AddButtonClick(Sender: TObject); var i: integer; fRect: TGridRect; begin ActiveControl := ValueListEditor; i := ValueListEditor.InsertRow('', '', True); fRect.Left := 0; fRect.Top := i; fRect.Right := 0; fRect.Bottom := i; ValueListEditor.Selection := fRect; ValueListEditor.EditorMode := True; end; procedure TFirstSampleServerMainForm.ValueListEditorValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: string); var s: string; begin while ValueListEditor.Cells[0, ARow] = '' do if InputQuery('Enter nickname', 'Enter nickname for ''' + ValueListEditor.Cells[1, ARow] + ''':', s) then begin ValueListEditor.Cells[0, ARow] := s; end else begin ValueListEditor.RestoreCurrentRow; ValueListEditor.DeleteRow(ARow); Exit; end; while ValueListEditor.Cells[1, ARow] = '' do if InputQuery('Enter Full Name', 'Enter Full Name for ''' + ValueListEditor.Cells[0, ARow] + ''':', s) then begin ValueListEditor.Cells[1, ARow] := s; end else begin ValueListEditor.RestoreCurrentRow; ValueListEditor.DeleteRow(ARow); Exit; end; end; procedure TFirstSampleServerMainForm.FormDestroy(Sender: TObject); begin StrList.Free; MultiReadSingleWriter.Free; end; procedure TFirstSampleServerMainForm.ValueListEditorStringsChange( Sender: TObject); begin MultiReadSingleWriter.BeginWrite; try StrList.Assign(ValueListEditor.Strings); finally MultiReadSingleWriter.EndWrite; end; end; end.