Member
Статус: Не в сети Регистрация: 04.04.2005 Откуда: Екатеринбург
Доброго времени суток уважаемые программисты!
У меня есть проблемя:
мне необходимо при открытии нового текстового файла заносить его содержимое в StringGrid, который будет динамически создаваться вместе с TabSheet. Необходимо чтобы имя у StringGrid зависили от номера файла.
Изначально не известно сколько файлов будет открыто.
проблема в том как это сделать
Последний раз редактировалось W[E]RTEX 28.10.2005 21:37, всего редактировалось 1 раз.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Давай по порядку.
1. Почему текстовый файл надо в StringGrid? Если обьясниш точнее что надо сделать, я тебе примерчик набросаю 2. Я так понял, что после редактирования надо писать обратно в файл?
Вообщето тут надо применять MDI раз уж у тебя работа идет с несколькими файлами сразу. Пример простого текстового редактора должен быть в поставке Delphi.
Member
Статус: Не в сети Регистрация: 04.04.2005 Откуда: Екатеринбург
Работать буду с несколькими файлами.
Содержимое файлов хочу поместить либо в ListBox либо в StringGrid, пока смотрючто удобнее(крсивее).
Заранее количество открываемых файлов не известно, но мне кажется больше 25 файлов врятли кто будет открывать.
После редактирования действительно все сохраняем в файл.
значит как я понял необходимо создать массив:
Код:
StrGrid: arrary [1..25] of TStringGrid; ... {потом значит при открытии файла создаем для него StrGrid} ... i:=0; ... StrGrid[i]:=TStringGrid.Create(Self); with StrGrid[SGc] do begin {параметры задаем} end; {запихиваем туда строки из файла}
но у меня не получается определить с какой именно таблицей идет работа.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
W[E]RTEX писал(а):
хотелось бы что-то на вид оперы или как в excel
Это всего лиш модификация того же MDI. Видел к примеру Avant Browser? Там тоже табы есть, но они прилеплены к окнам. Так что не надо изорбретать колесо!
А если уж так страшно хочется все на динамику посабить, то почитай хелпик по работе с компонентами у TForm.
Member
Статус: Не в сети Регистрация: 04.04.2005 Откуда: Екатеринбург
а как без динамики-то обойтись? так и так ее использовать.
Седня попробовал работать с mdi, чтобы приделать вкладки нкжно испльзовать TabControl, правильно?, дак вот если вешеть на каждую вкладку окно документа, то получится Avant Browser, так ?. но тут возникла проблема как сделать так чтобы пользователь не наблюдал как при добавлении документа дочерняя форма раскрывается на всю радительскую.
Member
Статус: Не в сети Регистрация: 04.04.2005 Откуда: Екатеринбург
Ray Adams, пример посмотрел, именно то что надо. Спасибо.
Сделал контекстное меню: "Выделить все"
Но возникла проблема вот здесь
Код:
if PageControl1.ActivePage<>nil then begin tb:=PageControl1.ActivePage; if tb.Components[0] = nil then exit; te:=tb.Components[0] as TMyMemo; te.Lines.SaveToFile(te.FileName); end;
выдает ошибку: Class: EListError msg: List index out of bounds
После долгих мучений попробовал Components[0] исправить на Controls[0], щас вроде работает.
А в чем отличие Components[0] от Controls[0] это же вроде обращение к определённому компаненту с индексом [n], так ?
Сделал контекстное меню: "Выделить все" Но возникла проблема
Упс, какое еще контекстное меню ты сделал? Memo и так имеет нужное контекстное меню.
W[E]RTEX писал(а):
После долгих мучений попробовал Components[0] исправить на Controls[0], щас вроде работает. А в чем отличие Components[0] от Controls[0] это же вроде обращение к определённому компаненту с индексом [n], так ?
Ты можешь использовать Controls для обращения к дочерним визуальным компонентам, а свойство Components – для обращения ко всем компонентам формы, независимо от родителя. Родителя можно определить по свойству Parent, а владельца по свойству Owner.
Решил делать как в книшке написано, через TActionList, как выяснилось действительно удобно. Дак вот: Создаю я значит при открытии:
Код:
{ Создаем страницу для файла } TabSheet:=TTabSheet.Create(self); with TabSheet do begin PageControl:= PCMain; Visible:=True; Caption:='Секция '+IntToStr(q);//OpenDialog1.FileName; PopupMenu:=PopupMenuTabSheet;[i][u]почему то не хочет работать в таком виде, работает только если самому PageControl'у задать это свойство[/u][/i] end; { Создаем таблицу для файла } StrGrid:=TMyStringGrid.Create(Self); with StrGrid do begin Parent:=TabSheet; FixedRows:=0; FixedCols:=0; GridLineWidth:=0; Align:=alClient; ColCount:=1; DefaultRowHeight:=16; PopupMenu:=PopupMenuStringGrid; FileName:=OpenDialog1.FileName; end; { Открываем файл и заносим его содержимое в таблицу } AssignFile(FileTXT,OpenDialog1.FileName); Reset(FileTXT); while not Eof(FileTXT) do begin Readln(FileTXT,tmp); StrGrid.Cells[0,i]:=tmp; i:=i+1; StrGrid.RowCount:=i; end; CloseFile(FileTXT); { Делаем ширину столбца по ширине данных } with StrGrid do begin MaxWidth:=0; for c:=0 to RowCount - 1 do begin w := Canvas.TextWidth(Cells[0,c]); if w > MaxWidth then MaxWidth := w; end; if MaxWidth<Width then ColWidths[0]:=Width-5 else ColWidths[0] := MaxWidth + 5; end; PCMain.ActivePage:=TabSheet;
потом значит:
Код:
procedure TMainForm.ActionItemsSelectAllExecute(Sender: TObject); var SRect: TGridRect; begin if PCMain.ActivePage<>nil then begin TabSheet:=PCMain.ActivePage; if TabSheet.Components[0] = nil then exit; StrGrid:=TabSheet.Components [0] as TMyStringGrid;
with StrGrid do begin SetFocus; SRect.Top := 0; SRect.Left := 0; SRect.Bottom := RowCount; SRect.Right:=1; Selection := SRect; end;
end;
если использую Components, то возникает ошибка, если Controls-все нормально.
Кая понял:
if PCMain.ActivePage<>nil then //проверяем, активна ли страница ?
begin
TabSheet:=PCMain.ActivePage; //присваиваем
if TabSheet.Components[0] = nil then exit; // если компонентов нет, ничего не делаем
StrGrid:=TabSheet.Components [0] as TStringGrid; если есть, присваиваем
..... и т.д.
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения