![]() |
Zur Laufzeit erzeugten Popup.Items Prozeduren zuweisen
Delphi-Quellcode:
Der größte Teil des Codes stammt von Lucky und liest alle Rechnernamen im Netzwerk aus.. ich hab da noch die zeilen eingefügt, die bewirken, dass die 2 Backslashes vor den Namen verschwinden und die Zeile in der ich für jeden Rechnernamen ein neues PopupMenu.Item erzeuge
procedure TForm1.FormCreate(Sender: TObject);
var dwResult : DWord; hEnum : DWord; anrStruct : array [1..512] of NETRESOURCE; dwCount : DWord; dwBufferSize : DWord; lIndex : LongInt; pos : Integer; reg : string; NewItem : TMenuItem; begin try FillChar(anrStruct,SizeOf(anrStruct),0); anrStruct[1].lpRemoteName := PChar('WORKGROUP'); dwResult := WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,0, @anrStruct[1], hEnum); if dwResult = NO_ERROR then begin Memo1.Lines.Clear; dwBufferSize := SizeOf(anrStruct); dwCount := DWord(-1); dwResult := WNetEnumResource(hEnum, dwCount, @anrStruct[1], dwBufferSize); for lIndex := 1 to dwCount do begin pos := AnsiPos('\\', anrStruct[lIndex].lpRemoteName); if pos > 0 then begin reg := copy(anrStruct[lIndex].lpRemoteName, pos+2, length(anrStruct[lIndex].lpRemoteName)-2); NewItem := TMenuItem.Create(Self); NewItem.Caption := reg; NewItem.Name := 'POP_' + IntToStr(lIndex); PopupMenu1.Items.Add(NewItem); end end; end; finally WNetCloseEnum(hEnum); end; end; die Frage ist nun wie kann ich für jedes einzelne PopupMenu1.Item, dass ja dynamisch zur Laufzeit eingefügt wird ne Prozedur einbauen, die widerum etwas anderes bewirkt... ich habs wie oben schon drin steht mit
Delphi-Quellcode:
probiert und dann noch für POP_1 - POP_20 Prozeduren erstellt ala
NewItem.Name := 'POP_' + IntToStr(lIndex);
Delphi-Quellcode:
für die eigentlich noch gar kein Item vorhanden ist, deshalb darf ich auch 20mal auf NEIN klicken wenn ich das Prog starten will, dat muss doch einfacher gehn (funktioniert eh nicht), ich bin son Delphi newb ich brauch für alles ewig, NOCH hoff ich (weitertrainier :coder: )
procedure TForm1.POP_1Click(Sender: TObject);
begin Edit1.Text := 'Test3'; end; |
Re: Zur Laufzeit erzeugten Popup.Items Prozeduren zuweisen
Hai,
soll für jeden Menüeintrag eine andere Funktion hinterlegt sein? Wenn nein: Ich löse das immer üger das Tag des Menü-Items. Für alle Menüpunkte gibt es dann die selbe Funktion. In dieser werte ich dann das Tag aus.
Delphi-Quellcode:
procedure TFRM_Main.MyMenueClick (Sender: TObject);
begin Case (Sender as TMenuItem).Tag of 1: //mach etwas 2: //mach etwas anderes end; end; |
Es soll für jeden Menüeintrag auf den man klickt die Caption des Menüeintrags in als Edit1.Text festgelegt werden, ich denke mal das kann man wohl in eine Funktion packen, ich probier mal..
Hmm aber jetzt wo ichs mit grad so anschaue, glaube ich gibts keine einheitliche funktion onClick fürs PopupMenu.. da gibts nur onChange und OnPopup, was aber nicht die gesuchten Ereignisse sind |
Zitat:
Delphi-Quellcode:
procedure TForm1.MyMenuClick (Sender: TObject);
begin Edit1.Text := (Sender As TMenuItem).Caption; end; procedure TForm1.FormCreate(Sender: TObject); var ndx : Integer; MyMenu : TMenuItem; begin for ndx := 1 to 10 do begin MyMenu := TMenuItem.Create (self); MyMenu.Caption := 'Menü - ' + IntToStr (ndx); MyMenu.OnClick := MyMenuClick; PopupMenu1.Items.Add (MyMenu); end; end; |
JAU habs jetzt hingekriegt, FAST :D
das einzige Problem, dass jetzt noch besteht ist die Tatsache, dass wenn der Rechnername 'TEST' ist und ich jetzt da draufklicke im Edit1-Feld 'TE&ST' auftaucht, oder aber bei 'TESTRECHNER' zB 'TESTRE&CHNER' da tauchen also immer so komische & Zeichen auf, sieht ziemlich wahllos aus wo die auftauchen |
Zitat:
|
VIELEN VIELEN DANK SHARKY.. sowas muss man ja erstmal alles wissen, werd mir also zukünftig mal die Hilfe für jede Eigenschaft genauer ansehen, scheinen doch alle irgendwo ihren Sinn zu haben
|
Zitat:
Aber...... die Hilfe ist wirklich sehr hilfreich :lol: Zumindest bei den "Standardkomponenten" lohnt es sich mal die gesamten Eigenschaften durchzugehen. |
Zitat:
|
Exakt, man kann auch selbst festlegen, was unterstrichen werden soll, und zwar, indem man selbst ein "&" einfügt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz