Avatar billede jgthb Nybegynder
17. august 2006 - 11:11 Der er 2 kommentarer og
1 løsning

komponent eksisterer

Hej, hvordan tjekker jeg om et bestemt komponent findes. Der er her tale om et TMenuItem. Jeg har prøvet at løse det baseret på dette:
http://www.eksperten.dk/spm/495641.

Men hos mig bliver Eksisterer aldrig forskellig fra nul. Her er koden:

procedure TForm1.ListboxClick(Sender: TObject);
var
Eksisterer,Opslag: TMenuItem;
i: integer;
begin
...
MemoHent.Clear;
MemoHent.Lines.LoadFromFile(Sti+'data\opslagsbog'+IntToStr(Ordbognummer)+'.txt');
For i:=1 to 5 do//MemoHent.Lines.Count do
begin
Eksisterer:=Tmenuitem(FindComponent('menuopslag'+IntToStr(i)));
if Eksisterer<>nil then  /////////////////HER!!
begin
if MemoHent.Lines[Listbox.ItemIndex+1]=MemoHent.Lines[i] then
exit;
ShowMessage(MemoHent.Lines[Listbox.Itemindex+1]);
ShowMessage(MemoHent.Lines[i]);
end;
end;
Opslag:=TMenuItem.Create(MainMenu);
Opsledeord1.Add(Opslag);
Opslag.Name:='menuopslag'+IntToStr(Listbox.ItemIndex+1);
Opslag.Caption:=MemoHent.Lines[Listbox.ItemIndex];
Opslag.Tag:=Listbox.ItemIndex+1;
Opslag.OnClick:=OpslagNummerValg;
...


Håber I kan hjælpe.
Avatar billede martinlind Nybegynder
17. august 2006 - 11:52 #1
Problemmet med Findcomponent er at den kigger i Component's listen og der er din menuItem comp. kun hvis den har Owner sat, eller også kommer FindComponent ikke helt ned i alle listerne, så må du selv søge dine menuer igennem
Avatar billede a_nor Nybegynder
17. august 2006 - 16:54 #2
Du skal create menupunktet med Self i stedet for MainMenu:
  Opslag:=TMenuItem.Create(self);
Avatar billede jgthb Nybegynder
17. august 2006 - 18:52 #3
Tak. det virker fint nu, a nor. Jeg ved ikke helt, hvordan du ville have, jeg skulle løse det, martinlind. Var det på samme måde som a nor? For de interesserede, det ser således ud nu:

...
memoHent.clear;
memoHent.Lines.LoadFromFile(sti+'data\opslagsbog'+inttostr(ordbognummer)+'.txt');
for i:=1 to memoHent.Lines.count do
begin
eksisterer:=Tmenuitem(findcomponent('menuopslag'+inttostr(i)));
if eksisterer<>nil then
begin
if memoHent.Lines[listbox.itemindex+1]=memoHent.Lines[i] then
begin
Tmenuitem(findcomponent('menuopslag'+inttostr(i))).MenuIndex:=0;
exit;
end;
end;
end;
opslag:=TMenuItem.Create(self);
opsledeord1.add(opslag);
opslag.Name:='menuopslag'+inttostr(listbox.itemindex+1);
opslag.Caption:=memoHent.Lines[listbox.itemindex];
opslag.Tag:=listbox.itemindex+1;
opslag.OnClick:=opslagnummervalg;
opslag.MenuIndex:=0;
...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester