А если Геннадий, Вы будете всё время пенять на мой тон, то приведу пример письма где тон был деловым и доброжелательным, после чего Вы почему-то стали просто игнорировать все мои дальнейшие дельные замечания. Какой у меня должен быть тон обращения к Вам после этого?
> Задержался с ответом, извините . Высылаю архивированный каталог разработки
> Дракон-редактора.
Огромное спасибо! Посмотрел код. Довольно хорошо реализовано. Но и возможных улучшений конечно видится множество
Например, при сохранении в рисунок можно воспользоваться форматом PNG (гораздо лучше подходящий формат для схем и более эффективный в данном случае) - фалы получаются как минимум в 10 раз меньше:
Вот здесь можно взять компонент:
http://www.focusoncode.com/delphi-and-p ... phics-png/ uses
pngimage;
procedure TForm1.SpeedButton7Click(Sender: TObject);
var L,T,R,B:Integer; // Сохранить лист в графическом файле
N:Integer;
Dr:tDr;
BMP:TBitMap;
PNG: TPNGObject;
NameF:String;
begin
L:=BigMax; T:=BigMax; R:=-BigMax; B:=-BigMax;
for N:=0 to SDr.Count-1 do begin
Dr:=SDr.Items[N];
L:=Min(Dr.Rct.Left,L);
T:=Min(Dr.Rct.Top,T);
R:=Max(Dr.Rct.Right,R);
B:=Max(Dr.Rct.Bottom,B);
end;
L:=Max(1,L-D);
T:=Max(1,T-D);
R:=Min(R+D,Form1.Image1.Width-1);
B:=Min(B+D,Form1.Image1.Height-1);
Red.El:=Nil; Red.Dr:=Nil;
Draw;
//
BMP:=TBitMap.Create;
BMP.Width:=R-L;
BMP.Height:=B-T;
BitBlt(BMP.Canvas.Handle,0,0,BMP.Width,BMP.Height,
Form1.Image1.Canvas.Handle,L,T,SRCCOPY);
//
PNG := TPNGObject.Create;
PNG.Assign(BMP);
PNG.CompressionLevel := 9;
NameF:=copy(NameDR, 1, Length(NameDR) - 4) + '.PNG';
PNG.SaveToFile(NameF);
PNG.Free;
BMP.Free;
StatusBar1.SimpleText:='Изображение сохранено в файле: '+NameF;
end;
Количество перерисовок окна можно немного уменьшить изменив обработчик FormMouseWheel:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin // Перемещение листа колесом мыши
if Shift=[] then
Image1.Top := Max(ClientHeight - 50 - Image1.Height - MemoPrim.Height, Min(50, Image1.Top + WheelDelta div 3))
else
Image1.Left := Max(ClientWidth - 50 - Image1.Width, Min(50, Image1.Left - WheelDelta div 2));
end;
> Сейчас пишется новая версия. В ней формат выходного файла изменен.
А конвертация из старого формата предусматривается?
> Для меня интересно знать о Вашем использовании Дракон-редактора, сообщайте.
Для начала решил приделать генерацию Oberon-кода по нажатию кнопки
Всё-таки, похоже правильно Вы разделяете тексты на отображаемый в элементе, и код вынесенный в примечание... Текст в элементе должен словесно описывать действие производимое блоком. По-идее нагляднее (эргономичнее) получается. А после генерации получаем подробно комментированный код
Вот, обдумываю, как получше всё это организовать.