Текущий архив: 2003.09.11;
Скачать: CL | DM;
Вниз
Удаление кнопки Найти похожие ветки
← →
Безымянный проситель (2003-08-29 20:31) [0]Я динамически создаю ToolBar"ы (ToolBar 2000), а на них кнопки. Тоже динамически. Потом все это дело сохраняю, а при следующей загрузке загружаю. Во время работы юзер может удалять кнопки. Дык вот проблема в следующем. Когда кнопка создана только что, она не удаляется, а после новой загрузки все Ok. Или наоборот свежесозданная кнопка удаляеться, а после следующей загрузки - нет. Вопрос: Как грамотно удалить кнопку?
← →
Юрий Федоров (2003-08-29 21:47) [1]вызвать ей Free наверно
← →
Sam Stone (2003-08-29 21:58) [2]Если совсем ничего не поможет - делай их невидимыми ;)
Но, по идее, или Free, или Destroy должен ее убивать
← →
panov (2003-08-29 22:44) [3]А код, как создаешь кнопки, можно посмотреть?
← →
Безымянный проситель (2003-08-29 23:52) [4]2 panov ©
Вообще-то он большой. Вот некоторые, основные куски:
procedure SaveComponentToTextFile(Component: TComponent; const FileName: string);
var
ms:TMemoryStream;
fs:TFileStream;
begin
fs:=TFileStream.Create(FileName, fmCreate or fmOpenWrite);
ms:=TMemoryStream.Create;
try
ms.WriteComponent(Component);
ms.position := 0;
ObjectBinaryToText(ms, fs);
finally
ms.Free;
fs.free;
end;
end;
procedure LoadComponentFromTextFile(Component: TComponent; const FileName: string);
var
ms:TMemoryStream;
fs:TFileStream;
begin
ms:=TMemoryStream.Create;
fs:=TFileStream.Create(FileName, fmOpenRead);
try
ObjectTextToBinary(fs, ms);
ms.position := 0;
ms.ReadComponent(Component);
finally
ms.Free;
fs.free;
end;
end;
Что это, объяснять не надо? Далее:
procedure TFrmSetup.Btn_ToolAddClick(Sender: TObject);
Var
Bar:TTBToolbar;
Bar_name:string;
ind:integer;
begin
If InputQuery("[Add]",EnterNameFNewBar,Bar_name)then
Begin
ToolBars_listbox.Hide; //Чтоб не смущало - это просто для перерисовки компонента. Почему так //лихо? А вот так. По-другому не работает.
If (pos("=",Bar_name)>0) Or (Bar_name="") then //на это тоже не обращайте внимание.
Exit
else
Begin
Bar:=TTBToolbar.Create(FrmEditor);
Bar.Name:="ToolBar_"+IntToStr(ToolBarsCount);
Bar.CurrentDock:=frmEditor.TBDock;
Bar.SystemFont:=False;
Bar.DragHandleStyle:=dhDouble;
Bar.ShowHint:=True;
Bar.Caption:=Bar_name;
Bar.CloseButton:=False;
Bar.DockMode:=dmCannotFloat;
ind:=ToolBars_listbox.Items.Add(Bar.Caption+"="+Bar.Name);
ToolBars_listbox.Checked[ind]:=True;
ToolBarsCount:=ToolBarsCount+1;
ToolBars_listbox.ItemIndex:=0;
ToolBars_listboxClick(Self);
Total_bars_lbl.Caption:=inttostr(ToolBarsCount);
ToolBars_listbox.Show;
end;
End;
end;
Зто добавление нового ToolBar"а. Дальше - добавление новой кнопки - через другой диалог.
procedure TFrmAddButton.Btn_OkClick(Sender: TObject);
var
i:integer;
Button:TTBItem;
mi:TMenuItem;
begin
mi:=get_menu_item(Menu_List.Selected);
if (mi.Action=nil) or (mi.Caption="-") or (mi.Count>0) or
(mi.RadioItem=True) or (Pos("=",mi.Caption)>0) or (mi.Caption="") then
begin
Application.MessageBox(PChar(frmEditor.MAsButton),"[Add button]",mb_ok+mb_iconinformation);
Exit;
end;
for i:=0 to FrmEditor.ComponentCount-1 do
begin
if FrmEditor.Components[i] is TTBToolbar then
begin
If (TTBToolbar(FrmEditor.Components[i]).Name=GetRealBarOrButtonName(FrmSe tup.ToolBars_ListBox.Items.Strings[FrmSetup.ToolBars_ListBox.itemindex ]))then
Begin
Button:=TTBItem.Create(Self);
Button.Name:="ToolButton_"+IntToStr(ToolButtonsCount);
Button.Action:=mi.Action;
Button.Hint:=Hint_Ed.Text;
GetActionFromMenuItem(mi).Hint:=Hint_Ed.Text;
TTBToolbar(FrmEditor.Components[i]).Items.Add(Button);
ToolButtonsCount:=ToolButtonsCount+1;
FrmSetup.ToolBars_listboxClick(Self);
FrmSetup.Total_buttons_lbl.Caption:=Inttostr(ToolButtonsCount);
End;
end;
End;
Hint_Ed.Clear;
Close;
end;
Процедуры сохранения и загрузки ToolBar"ов
Procedure TFrmSetup.SaveBars;
var
i:integer;
begin
If Not DirectoryExists(ExtractFilePath(ParamStr(0)) +"ToolBars")then
CreateDir(ExtractFilePath(ParamStr(0)) +"ToolBars");
for i:=0 to FrmEditor.ComponentCount-1 do
begin
if FrmEditor.Components[i] is TTBToolbar then
begin
if Not(TTBToolbar(FrmEditor.Components[i]).Name="")then
SaveComponentToTextFile(TTBToolbar(FrmEditor.Components[i]),ExtractFil ePath(ParamStr(0))+"ToolBars"+TTBToolbar(FrmEditor.Components[i]).Name +".tb");
end;
end;
end;
Procedure TFrmSetup.LoadBars;
var
i,l:integer;
begin
for l:=0 to ToolBarList.Count-1 do //ToolBarList - стринглист, в который пишутся названия всех //файлов из директории с разширением *.tb
Begin
LoadBar:=TTBToolBar.Create(FrmEditor);
LoadBar.Parent:=FrmEditor;
LoadBar.CurrentDock:=frmEditor.TBDock;
LoadComponentFromTextFile(LoadBar,ExtractFilePath(ParamStr(0))+"ToolBa rs"+ToolBarList.Strings[l]);
end;
end;
← →
panov (2003-08-30 14:30) [5]Для того, чтобы грамотно удалить, надо правильно создать-) парадокс, однако...
Button:=TTBItem.Create(Self);
Button.Name:="ToolButton_"+IntToStr(ToolButtonsCount);
Button.Action:=mi.Action;
Button.Hint:=Hint_Ed.Text;
GetActionFromMenuItem(mi).Hint:=Hint_Ed.Text;
Вот в этом куске попробуй изменить кое-что. это повлечет за собой и неного изменений в других местах(мне кажется так):
Button:=TTBItem.Create(nil);
Button.Name:="ToolButton_"+IntToStr(ToolButtonsCount);
Button.Action:=mi.Action;
Button.Hint:=Hint_Ed.Text;
GetActionFromMenuItem(mi).Hint:=Hint_Ed.Text;
Button.Parent := Self;
← →
хз (2003-08-31 20:45) [6]> panov ©
Вообще-то не так. Во-первых, у ToolBar 2000 свойство кнопки Parent только для чтения. Можно немного извратится, но для начала в проц. создания кнопки:
Button:=TTBItem.Create(frmEditor);
А для удаления вот так:
If (FrmEditor.FindComponent(CompName)=nil)then
LoadBar.FindComponent(имя_кнопки).Free
Else
FrmEditor.FindComponent(имя_кнопки).Free;
По идее должно работать...
Страницы: 1 вся ветка
Текущий архив: 2003.09.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c