Autor |
Beitrag |
hibbert
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: 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
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:
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
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Do 17.04.03 08:57
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 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: 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:
Quelltext 1:
| MainMenu1.Items[4].add(listbox1.items[i]); |
obwohl ich folgendes gemacht habe:
Quelltext
was nun?
mfg hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Luncustaf
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Do 17.04.03 10:54
hi sorry
so sollte es gehen
Quelltext 1:
| Mainmenu1.Items.items[4].add(Listbox.Items[i]); |
gr€€tz
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Do 17.04.03 11:22
hi,
sorry, ist wieder der gleiche fehler, ich hab jetzt
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);
aber vielleicht hilft das jemandem weiter
mfg hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Luncustaf
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Do 17.04.03 11:47
hi
bei mir gibt es zwei add's einmal das was du beschrieben hast und einmal dieses hier
Quelltext 1:
| add(Item : TMenuItem); |
meiner meinung nach sollte das funktionieren *denk*
gr€€tz
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Do 17.04.03 12:07
so,
jetzt soll ich alos
Quelltext 1:
| add(Item : TMenuItem); |
soll ich dann da auch wieder
Quelltext 1:
| add(Listbox1.Items[i]) |
daraus machen, wenn ja, dann ist das doch das selbe bzw. das gleiche.
oder was kommt dann diesmal darein?
mfg
hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
Luncustaf
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Do 17.04.03 12:45
eigentlich ja also soll das selbe rein weis aber auch net wieso das nicht funktioniert :/
gr€€tz
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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: 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
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Do 17.04.03 16:00
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Do 17.04.03 16:34
macht ja nichts, war doch auf ein netter zeitvertreib
DANKE !!
so ich hab jetzt folgendes draus gemacht:
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
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Do 17.04.03 16:57
So sollte es gehen (ungetestet): 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 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Do 17.04.03 22:58
arrrg, da is a error:
Zitat: | [Error] Unit2.pas(189): Incompatible types: 'method pointer and regular procedure' |
bei
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
Quelltext
mfg hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: 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:
ich denka mal, dass das entweder für die implementation steht, oder für {$R *.dfm}.
wenn ich jetzt
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:
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
mfg hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: 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: 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: 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  !
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
hibbert 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: Sa 19.04.03 23:38
Hi,
danke für deine beschreibung ! jetzt hat es funktioniert und ich habe noch etwas neues dazu gelernt  , 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
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: So 20.04.03 02:18
Hallo Hibbert!
Hier fallen mir spontan 2 Möglichkeiten ein: - Du gehst alle MenuItems in einer Schleife durch und überprüfst ob sie gecheckt sind.
- 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 
      
Beiträge: 1007
WinServer2003, Win XP, Linux
D6 Pers, D05
|
Verfasst: 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?
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
mfg hibbert
_________________ I kunnen väl svara endast ja eller nej
Om i viljen eller nej
|
|