Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Вниз

Удаление кнопки   Найти похожие ветки 

 
Безымянный проситель   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
3-33427
Jean
2003-08-21 22:20
2003.09.11
Access + Excel


14-33740
Zheks
2003-08-25 00:32
2003.09.11
Shape


1-33632
tgdgdfg
2003-08-30 20:05
2003.09.11
Сортировка в TreeView


14-33787
panov
2003-08-22 18:24
2003.09.11
Форумы заработали.


1-33576
BillyJeans
2003-08-28 15:02
2003.09.11
Excel и консольная прога...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский