Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 16.04.03 21:09 
hallo,
ich habe auf einer form eine listbox und ein tmenu.
wenn die form aufgerufen wird, soll eine datei in die listbox geladen werden
ausblenden Quelltext
1:
listbox1.items.loadfromfile('C:\text.txt');					

nun sollen im tmenu die gleichen einträge erscheinen, wie in der listbox.
einen ''button'' im tmenu zu ändern ist ja recht einfach:
ausblenden Quelltext
1:
mainmenu1.items[2].items[3].items[2].items[1].caption:='text';					

so, kann man nun beides kombinieren, sodass alle listboxeinträge dem mainmenu1.items[4] hinzugefügt.

mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 17.04.03 08:57 
ausblenden Quelltext
1:
2:
3:
4:
5:
listbox1.items.loadfromfile('C:\test.txt');
for i := 0 to listbox1.items.count -1 do //die Variable i noch lokal deklarieren
begin
   MainMenu1.Items[4].add(listbox1.items[i]);
end;//for
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Do 17.04.03 09:39 
Danke, aber ich erhalte diesen error
Zitat:
[Error] Unit2.pas(161): There is no overloaded version of 'Add' that can be called with these arguments

und dfas wird mir dann angestrichen:
ausblenden Quelltext
1:
MainMenu1.Items[4].add(listbox1.items[i]);					

obwohl ich folgendes gemacht habe:
ausblenden Quelltext
1:
var i:integer;					


was nun?

mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 17.04.03 10:54 
hi sorry

so sollte es gehen

ausblenden Quelltext
1:
Mainmenu1.Items.items[4].add(Listbox.Items[i]);					



gr€€tz
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Do 17.04.03 11:22 
hi,
sorry, ist wieder der gleiche fehler, ich hab jetzt
ausblenden Quelltext
1:
Mainmenu1.Items.items[4].add(Listbox1.Items[i]);					

mal selber eingegeben, und bei D6 mach D6 ja immer vorschlage für den code und so soll das dann irgendwie aussehen:
Zitat:
mainmenu1.Items.Items[4].Add(const AItes:arry of TMenuItem);

also, der fehler ich leider geblieben.
Zitat:
[Error] Unit2.pas(161): There is no overloaded version of 'Add' that can be called with these arguments


ich hab leider nicht die große ahnung von
Add(const AItes:arry of TMenuItem); :oops:
aber vielleicht hilft das jemandem weiter :wink:

mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 17.04.03 11:47 
hi

bei mir gibt es zwei add's einmal das was du beschrieben hast und einmal dieses hier

ausblenden Quelltext
1:
add(Item : TMenuItem);					



meiner meinung nach sollte das funktionieren *denk*

gr€€tz
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Do 17.04.03 12:07 
so,
jetzt soll ich alos
ausblenden Quelltext
1:
add(Item : TMenuItem);					

soll ich dann da auch wieder
ausblenden Quelltext
1:
add(Listbox1.Items[i])					

daraus machen, wenn ja, dann ist das doch das selbe bzw. das gleiche.:wink:

oder was kommt dann diesmal darein?

mfg
hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 17.04.03 12:45 
eigentlich ja also soll das selbe rein weis aber auch net wieso das nicht funktioniert :/


gr€€tz
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 17.04.03 13:57 
Hallo ihr 2!

Dann mach ich mal eurem Kämpfen um die Lösung ein Ende ;). Wie oben beschrieben gibt es keine Methode Add, die ein String hinzufügt. Hingegen wird ein Menüitem verlangt.
Ein Beispiel:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
var
  MenuItem: TMenuItem;
begin
  MenuItem := TMenuItem.Create(MainMenu);
  MenuItem.caption := ListBox.Items[I];
  MainMenu.Items[4].Add(MenuItem);
Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 17.04.03 16:00 
:autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch:

ich doof innem anderen thread hab ich das noch einem genauso erklärt :autsch:

man man heute bin ich doof sorry hibbert

www.delphi-forum.de/viewtopic.php?t=9643


gr€€tz
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Do 17.04.03 16:34 
macht ja nichts, war doch auf ein netter zeitvertreib :wink:
DANKE !!

so ich hab jetzt folgendes draus gemacht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
mainmenu1.Items[4].Clear;
if listbox1.Count=0 then exit;
listbox1.items.loadfromfile('user/user.ini');
for i := 0 to listbox1.items.count -1 do 
  begin
  MenuItem := TMenuItem.Create(MainMenu1);
  MenuItem.caption := ListBox1.Items[I];
  MainMenu1.Items[4].Add(MenuItem);
  mainmenu1.Items[4].Items[i].RadioItem:=true;
  mainmenu1.Items[4].Items[i].Checked:=true;
  end;

so diese aktion wird bei einem buttonklick ausgeführt. funktioniert ja auch ganz gut (danke nochmal), aber jetzt ist ja nur ein item des menüs "gechecked", soll ja auch so sein, aber wenn ich jetzt ein anderes item anklicken will,kann ich es zwar anklicken, aber der punkt setzt sich nicht davor. :? könnt ihr mir da auch nochmal weiterhelfen :?:

thx hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 17.04.03 16:57 
So sollte es gehen (ungetestet):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.MenuItemClick(Sender: TObject);
begin
  with (Sender as TMenuItem) do
    Checked := not Checked;
end;
[...]
var
  MenuItem: TMenuItem;
  I: Integer;
begin
  MainMenu1.Items[4].Clear;
  if ListBox1.Items.Count = 0 then
    Exit;
  ListBox1.Items.LoadFromFile('user/user.ini');
  for I := 0 to ListBox1.Items.Count - 1 do begin
    MenuItem := TMenuItem.Create(MainMenu1);
    with MenuItem do begin
      Caption := ListBox1.Items[I];
      OnClick := MenuItemClick;
      GroupIndex := 12;
      RadioItem := True;
      Checked := True;  //verschrieben
    end;
    MainMenu1.Items[4].Add(MenuItem);
  end;
Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.


Zuletzt bearbeitet von wulfskin am Fr 18.04.03 17:41, insgesamt 1-mal bearbeitet
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Do 17.04.03 22:58 
arrrg, da is a error:

Zitat:
[Error] Unit2.pas(189): Incompatible types: 'method pointer and regular procedure'

bei
ausblenden Quelltext
1:
menuitem.OnClick := MenuItemClick;					

da stimmt was net und wenn ich diese zeile lösche, dann gibt noch nen error:
Zitat:
[Error] Unit2.pas(192): Undeclared identifier: 'Checled'

bei
ausblenden Quelltext
1:
Checled := True;					


mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Fr 18.04.03 17:42 
Hallo hibbert!

Hab den Quelltext oben verbessert. Folgende Korrektur ist wichtig:
Zitat:
procedure TForm1.MenuItemClick(Sender: TObject);
begin
Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Sa 19.04.03 14:47 
Danke, doch ich hab da noch ne frage:
Ähh, wo muss ich das denn überhaupt genau einfügen?
ich hab mir jetzt den code mal etwas genauer angeguckt und habe diese zeichen entdeckt:
Zitat:
[...]

ich denka mal, dass das entweder für die implementation steht, oder für {$R *.dfm}.
wenn ich jetzt
ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TForm2.MenuItemClick(Sender: TObject);
    begin
    with (Sender as TMenuItem) do
    Checked := not Checked;
    end;

also über der implementation einfüge, dann hab ich ne errormeldung erhalten:
Zitat:
Expected '=' but '(' found

hää? :?
ich hab dan mal das Mainmenu Symbo angeklickt und hab im object inspector unter events nachgesehen, da gibt es nämlich kein
procedure TForm2.MenuItemClick(Sender: TObject);,also
denke ich, das dieser Teil vor der implementation stehen muss.
das einzige was ich finden kann ist das:
ausblenden Quelltext
1:
2:
3:
4:
procedure TForm2.N9Click(Sender: TObject);
begin

end;

das ist aber wenn man auf ein betimmtes item des menüs klickt, wleches schon vorhanden sein muss !

was nun? ich blicke da langsam net mehr durch :eyecrazy:

mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Sa 19.04.03 15:06 
Hallo Hibbert!

Ich erkläre die jetzt ausführlich wie es funktioniert.
In deiner Unit im Private-Abschnitt schreibst du folgendes:
ausblenden Quelltext
1:
2:
3:
  private
  { Private-Deklarationen }
  procedure MenuItemClick(Sender: TObject);
Dies bedeutet das dein Formular jetzt eine Prozedure MenuItemClick beinhaltet. Dies ist nur der Prozedurekopf, irgendwo nach implementation folgt dann die eigentliche Prozedur:
ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TForm1.MenuItemClick(Sender: TObject);
begin
  with (Sender as TMenuItem) do
    Checked := not Checked;
end;
Der Rest (nach [....]) kommt irgendwo hin wo du es haben möchtest, z.B. auf Button-Click.

Gruß wulfskin!

P.S.: Das [...] sollte eigentlich nur als Platzhalter für dein Prozedurkopf gelten :roll:!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Sa 19.04.03 23:38 
Hi,
danke für deine beschreibung ! jetzt hat es funktioniert und ich habe noch etwas neues dazu gelernt :wink: , danke!!

Da wir aber nun beim thema sind, hab ich noch ne frage:
wie kann ich jetzt per buttonklick abfragen, welches item makiert ist?
Vielen dank!!

mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: So 20.04.03 02:18 
Hallo Hibbert!

Hier fallen mir spontan 2 Möglichkeiten ein:
  1. Du gehst alle MenuItems in einer Schleife durch und überprüfst ob sie gecheckt sind.
  2. Du speicherst in einer globalen Variablen die Nummer oder irgendwas eindeutiges des MenuItems bei jedem MenuItemClick (würde ich empfehlen).
Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: So 20.04.03 13:51 
hai
ja doch die 2. variante hört sich besser an, also, dass mus ich ja in dieser porcudure einbinden,oder?
ausblenden Quelltext
1:
procedure TForm2.MenuItemClick(Sender: TObject);					

aber mir welcher funktion bekomme ich denn den 'itemindex' des menuitems herraus?

ich kann dat einfach net finden :cry:

mfg hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej