{ Russian 866 codepage support } unit Edit; { Global variables } var CodePage866Item: TMenuItem; DoWordWrapItem: TMenuItem; { function NewItem(const ACaption: string; AShortCut: TShortCut; AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent; hCtx: Word; const AName: string): TMenuItem; } procedure InitEdit; var miEdit: TMenuItem; begin miEdit := MainWindow.FindComponent('miEdit'); CodePage866Item := NewItem('Convert From Code Page &866', 0, False, True, 0, nil {ignored - always must be nil}, 'miCodePage866'); CodePage866Item.OnClick := CodePage866Click; miEdit.Add(CodePage866Item); DoWordWrapItem := NewItem('Format Word Wrap', 0, False, True, 0, nil {ignored - always must be nil}, 'miDoWordWrap'); DoWordWrapItem.OnClick := DoWordWrapClick; miEdit.Add(DoWordWrapItem); end; procedure CodePage866Click(Sender: TObject); begin Editor.Lines.Text := Dos2WinRes(Editor.Lines.Text); end; procedure DoWordWrapClick(Sender: TObject); var i: Integer; S: string; VC: Integer; EN: Integer; StatusBar: TStatusBar; T: string; begin i := 0; VC := Editor.VisibleColCount - 1; StatusBar := MainWindow.FindComponent('StatusBar'); T := StatusBar.Panels.Items[0].Text; while i <= Editor.Lines.Count - 1 do begin StatusBar.Panels.Items[0].Text := IntToStr(i / Editor.Lines.Count * 100) + '%'; StatusBar.Update; S := Editor.Lines.Strings[i]; if Length(S) > VC then begin Editor.Lines.Delete(i); while Length(S) > VC do begin EN := FindEndOfLine(S, VC); Editor.Lines.Insert(i, Copy(S, 1, EN)); S := Copy(S, EN + 1, 1000000); i := i + 1; end; Editor.Lines.Insert(i, S); end; i := i + 1; end; StatusBar.Panels.Items[0].Text := T; end; function FindEndOfLine(S: string; P: Integer): Integer; var i: Integer; V: Integer; begin Result := P; for i := 0 to P - 1 do begin V := P - i; if S[V] = ' ' then Break; end; if V > 1 then Result := V; end; end.