Тексты обработчиков щелчков по кнопкам:
procedure TForm1.btnRazvernutClick(Sender: TObject); begin {кнопка Развернуть} TreeView1.FullExpand; end; procedure TForm1.btnSvernutClick(Sender: TObject); begin {кнопка Свернуть} TreeView1.FullCollapse; end;
Сделайте дв щелчок по компоненту TTreeView, расположенному на форме (находясь в среде Делфи ). Появится окно. Щелкайте кнопку NewItem, чтобы добавить узел этого же уровня или щелкайте NewSubItem, чтобы добавить узел подчиненного уровня. Заполните свойства узла (Item Properties). Для начала – только Text – это текст узла. Кстати, текст узла можно редактировать во время работы приложения. Когда Вы создадите список иконок, можно будет за каждым узлом закрепить иконки: одну - для обычного состояния ( ImageIndex ), другую – для выделенного (SelectedIndex). Щелкайте крестик узла, чтобы увидеть подчиненные узлы. Можно выделять узлы в любом порядке и добавлять в дерево узлы этого же уровня или подчиненные. Есть кнопка для удаления узлов.
procedure TForm1.FormCreate(Sender: TObject); var ic1: TIcon; ii:Integer; begin ImageList1.masked:= false; ImageList1.Height := 16; {свойства ImageList1 } ImageList1.Width := 16; ImageList1.AllocBy := 4; ic1:= TIcon.Create; {создаем объект ic1 для чтения иконок} for ii:=0 to 2 do begin ic1.LoadFromFile('.\icon'+intToStr(ii)+'.ico'); ImageList1.AddIcon(ic1); {здесь мы заполняем этот список ImageList1} end; ic1.free; end;
В режиме разработки приложения выделить форму, т е щелкнуть по ней. Далее в окне инспектора объектов убедиться, что выделена форма ( в верхнем окошке написано – Form1), перейти на закладку Events ( события) , найти строчку OnCreate и сделать двойной щелчок в правой части этой строчки (где мигает курсор и есть кнопочка с треугольником). В результате в редакторе будет создана заготовка (т е просто заголовок, begin и end ) обработчика события «создание формы». Операторы, которые Вы впишете между begin и end будут выполнены при создании формы. Перед begin можно (если нужно) вставить описания (констант, типов, переменных, меток, подпрограмм)
Запустите программу, она должна работать.
Поставим на форму 3 кнопки: «Найти текстовый файл», «Найти картинку» и «Записать», а также компоненты OpenDialog1 – для поиска файла на диске для открытия файла и SaveDialog1 – для поиска места на диске, где записать файл и вписывания имени файла. Диалоговые компоненты нужно слегка настроить: InitialDir = . (точка) – что означает, что вначале будем искать файлы в папке, из которой запущена программа. Filter = ‘Текстовые файлы|*.txt’ – что означает, что видны будут только файлы с расширением txt. Filter = ‘ Графические|*.bmp;*.jpg’ - что означает, что видны будут только файлы с расширением bmp и jpg .
помогает найти текстовый файл и записывает его содержимое в окно компонента Memo1. Затем мы можем отредактировать этот текст (т е из характеристики Иванова сделать характеристику Петрова) и записать (кнопка «Записать»)
Текст обработчика щелчка по этой кнопке:
procedure TForm1.Button3Click(Sender: TObject); begin OpenDialog1.Filter := 'Тексты |*.txt'; If OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName); end;
помогает найти графический файл (*.bmp,*.ico,*.jpg) и показывает его содержимое на форме Form2
Текст обработчика щелчка по этой кнопке:
procedure TForm1.Button2Click(Sender: TObject); var FN,Ext : String; begin Form2.Image1.Picture.Graphic := Nil; {перестраховка} Form2.OpenPictureDialog1.Filter:= 'Все: |*.bmp;*.jpg’; If Form2.OpenPictureDialog1.Execute then {диалог поиска файлов} begin FN := Form2.OpenPictureDialog1.FileName; FileName - имя найденного файла. try Form2.Image1.Picture.LoadFromFile(FN); // читаю файл except Form2.Image1.Picture.Graphic := nil; //если ошибка end; Ext := UpperCase(ExtractFileExt(FN)); //Привожу к верхнему регистру. ImageExt:= Ext; // запоминаю расширение. Переменная используется при записи картинки в файл. ( см // Form1.Button1Click ) If Form2.Image1.Picture.Graphic.Empty then exit; // если картинки нет If Ext = '.JPG' then Form2.SetJPEGOptions(Sender); // если расширение = JPG (процедура SetJPEGOptions // настраивает отображение картинки и находится в модуле Unit2. см ниже ) Ramka; Form2.Show; // - показать форму2 (с картинкой) end; end;
Procedure Ramka; begin Form2.Image1.Height := Form2.Image1.Picture.Height; Form2.Image1.Width := Form2.Image1.Picture.Width; Form2.ClientHeight := Form2.Image1.Height+3; Form2.ClientWidth := Form2.Image1.Width+3; end;
Рассмотрим что происходит при одиночном щелчке по какой либо строке списка. Естественно, соответствующий узел становится выбранным (Selected). Как было сказано, должен прочитаться текстовый документ, имя файла которого равно тексту узла. Поэтому можно сочинить такой обработчик:
procedure TForm1.TreeView1Click(Sender: TObject); begin If TreeView1.Selected = Nil then begin ShowMessage('Выбери строку'); exit end; FName := TreeView1.Selected.Text; edit1.Text := FName; {имя заносится в окошко Edit1 (излишество) } If FileExists(Dira+'\'+FName+'.txt') then begin Memo1.Clear; Memo1.Lines.LoadFromFile(Dira+'\'+FName+'.txt'); end else Memo1.Clear;- если файла нет, окошко Memo1 очищается end;
Рассмотрим что происходит при двойном щелчке по какой либо строке списка. Естественно, соответствующий узел становится выбранным (Selected). Как было сказано, должна прочитаться картинка, имя файла которой равно тексту узла. Поэтому можно сочинить такой обработчик:
procedure TForm1.TreeView1DblClick(Sender: TObject); begin Form2.Hide; прячется форма2 If TreeView1.Selected = Nil then begin ShowMessage('Выбери строку'); exit end; FName := TreeView1.Selected.Text; имя файла берется из свойства Text edit1.Text := FName; If FileExists(Dira+'\'+FName+'.bmp') or FileExists(Dira+'\'+FName+'.jpg') then если найден файл begin Form2.Image1.Picture.Graphic := Nil; Form2.OpenPictureDialog1.InitialDir:='.\'; end; If FileExists(Dira+'\'+FName+'.bmp') then begin Form2.OpenPictureDialog1.FileName:=Dira+'\'+FName+'.bmp'; установить имя файла Form2.OpenPictureDialog1.Filter:='BMP|*.bmp'; установить фильтр Form2.Image1.Picture.LoadFromFile(Dira+'\'+FName+'.bmp'); загрузить файл Ramka; - установить размеры формы-2 Form2.caption := 'Сотрудник: '+FName; заголовок формы Form2.Show; - показать форму-2 end; If FileExists(Dira+'\'+FName+'.jpg') then begin Form2.OpenPictureDialog1.FileName:=Dira+'\'+FName+'.jpg'; Form2.OpenPictureDialog1.Filter:='JPG|*.jpg'; Form2.Image1.Picture.LoadFromFile(Dira+'\'+FName+'.jpg'); Form2.SetJPEGOptions(Sender); Ramka; Form2.caption := 'Сотрудник: '+FName; Form2.Show; form2.top := 4; form2.Left := 4; форму поставить в лев –верх угол. end; end;Примечания:
Эта кнопка производит запись данных на диск. При этом проверяется: если число строк в Memo1 > 0 то содержимое Memo1 записывается в файл. Имя файла образуется из имени папки –Dira - из которой запущено приложение (чтобы записывать в свою папку) плюс текст выделенного узла + расширение txt. Аналогично, проверяется, есть ли картинка в форме2 (высота картинки, Form2.Image1.Picture.Height > 2 )
procedure TForm1.Button1Click(Sender: TObject); Var textB, ImageB: Boolean; begin If TreeView1.Selected = Nil then begin ShowMessage('Выбери строку'); exit end; FName := TreeView1.Selected.Text; TextB := Memo1.Lines.Count > 0; - есть текст в Memo1 ImageB := Form2.Image1.Picture.Height > 2; - есть картинка в форме2 If textB and (MessageDlg('Записать из окна Memo в текстовый файл: '+ FName+'.txt ?',mtConfirmation, [mbYes,mbNo],0) = mrYes ) then Memo1.Lines.SaveToFile(Dira+'\'+FName+'.txt'); If ImageB and (MessageDlg('Записать картинку в файл: '+ FName+' ?',mtConfirmation, [mbYes,mbNo],0) = mrYes ) then Form2.Image1.Picture.SaveToFile(Dira+'\'+FName+ImageExt); end;Примечания:
Создание второй формы – это дополнительные хлопоты, но зато можно красиво показать картинку – чтобы она занимала всю поверхность формы и размеры формы подстраивать под размер картинки.
unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ExtDlgs; type TForm2 = class(TForm) Image1: TImage; OpenPictureDialog1: TOpenPictureDialog; private public procedure SetJPEGOptions(Sender: TObject); end; var Form2: TForm2; implementation uses JPEG; {$R *.DFM} procedure TForm2.SetJPEGOptions(Sender: TObject); var Temp: Boolean; begin Temp := Image1.Picture.Graphic is TJPEGImage; if Temp then with TJPEGImage(Image1.Picture.Graphic) do begin свойства изображения PixelFormat :=jf24Bit; Scale := jsFullSize; полный размер (можно 1/2 ... 1/8 ) Performance :=jpBestQuality; {TJPegPerformance } ProgressiveDisplay := true; end; Image1.IncrementalDisplay := true; end; end.
implementation uses Unit2,JPEG; здесь модуль JPEG нужен для работы с файлами JPG