Avatar billede fun22 Nybegynder
23. april 2003 - 08:14 Der er 18 kommentarer og
1 løsning

popup menu og ini filer

Hej

Jeg bruger denne kode til at oprette et menu item i min popup menu:

var
  M: TTBItem;
begin
  M := TTBItem.Create(Self);
  M.Caption := 'HE HE';
  M.OnClick := start;
  TBSubmenuItem1.Add(M);

Men jeg vil gerne have at den skal oprette en til hver post der er under [List] i min ini fil. Hvordan gør jeg det??
Jeg har en ini fil der ser sådan her ud: myini.ini
[List]
hej=dav


Så skal den sætte 'hej' ind i caption og dav ind i onclick. How do i do that?
Avatar billede cooljay2000 Nybegynder
23. april 2003 - 09:04 #1
Det giver ikke mening at sætte en    et funktionskald (OnClick) til en streng-værdi ('dav')
Avatar billede cooljay2000 Nybegynder
23. april 2003 - 09:06 #2
hov - der var jeg vist lidt hurtig!

Det giver ikke mening at sætte en TNotifyEvent (OnClick), som så skal være et funktionskald, til en streng-værdi ('dav').
Avatar billede fun22 Nybegynder
23. april 2003 - 09:27 #3
a hva???????
Avatar billede fun22 Nybegynder
23. april 2003 - 09:29 #4
det er fordi at rigtig så er der en sti til et program i stedet for dav. Det var bare næmmere at skrive
Avatar billede jensfudge Nybegynder
23. april 2003 - 11:03 #5
Det er ikke et spørgsmål om hvad rutinen hedder, dit "Dav" Kunne f.eks. være en rutine der hedder InitialiseData eller hvad, men det giver stadig ikke mening at have rutinen som streng ind i din inifil. Du kan læse navnet ind, men du skal stadig i koden skrive noget som:

var
sRutineName : string;


sRutineName := readString(blablabla...);

OnClick := sRutineName, men det vil give en kompileringsfejl.
Du kan derimod have en funktion i dit delphi program der mapper en streng ("dav") over til en rutinepointer (dav).

OnClick := GetProcedure(sRutineName);

Funktionen GetProcedure vil jeg overlade til dig selv.

/Jens
Avatar billede fun22 Nybegynder
25. april 2003 - 07:49 #6
Ini filen ser rigtigt sådan her ud

[List]
Smart Ripper=c:\programmer\sr\sr.exe

Den skal så oprette knapper på den menu med alle dem der er i inifilen under LIST, og deres onclick skal jo så vare den der med shellapi hvor at den så indsætter valuen fra ini filen.
Avatar billede fun22 Nybegynder
25. april 2003 - 14:11 #7
???
Avatar billede stoney Nybegynder
25. april 2003 - 15:00 #8
Følgende virker med en almindelig popupmenu
Du skal selvfølgelig lige rette navnet på din ini fil

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus,inifiles, StdCtrls,shellapi;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    test1: TMenuItem;
    procedure PopupMenu1Popup(Sender: TObject);
    procedure test(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}
procedure tform1.test(Sender: TObject);
var
inifile : Tinifile;
s,t : string;



begin

t := copy((Sender as Tmenuitem).Caption,2,length((Sender as Tmenuitem).Caption));

begin
IniFile := TIniFile.create(ExtractFilePath(ParamStr(0))+'programs.ini');
S := IniFile.ReadString('List',t,'');


Shellexecute(Handle, 'OPEN', pchar(s), nil, nil, SW_SHOW);

inifile.Free;
end


end;

procedure TForm1.PopupMenu1Popup(Sender: TObject);

var
menu:TMenuitem;
i:integer;
  IniFile : TIniFile;
  s : TStringlist;
begin
s := Tstringlist.Create;

IniFile := TIniFile.create(ExtractFilePath(ParamStr(0))+'programs.ini');
PopupMenu1.Items.Clear;
inifile.ReadSection('List',s);
for I := 0 to s.Count -1 do
begin
menu := TMenuitem.Create(PopupMenu1);
menu.Caption := s[i];
menu.OnClick := test;
PopupMenu1.Items.Add(menu);
end;
s.Free;
//menu.Free;
end;

end.

Stoney
Avatar billede stoney Nybegynder
25. april 2003 - 15:05 #9
ups !!

Du kan droppe dette


type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    test1: TMenuItem; // GLEM DENNE LINIE

Stoney
Avatar billede fun22 Nybegynder
25. april 2003 - 15:37 #10
Af en eller anden grund så når jeg klikke på en af titlerne i menuen så åbner den bare den mappe hvor ini filen ligger i.
Avatar billede stoney Nybegynder
25. april 2003 - 15:40 #11
Husk at rette navnet på din ini fil + din ini fil skal ligge
i samme dir som din exe fil

Stoney
Avatar billede fun22 Nybegynder
25. april 2003 - 15:55 #12
det gør de også. Den kan jo godt oprette menu punkterne, den kan bare ikke eksekvere det angivende program
Avatar billede stoney Nybegynder
25. april 2003 - 16:00 #13
Er du helt sikker på du har angivet rigtig sti til dit spil/prog ?

Eller drop en mail adr og jeg sender dig projectet.

Hvad er dit OS iøvrigt Win9x,nt,2000,XP ?

Stoney
Avatar billede fun22 Nybegynder
25. april 2003 - 16:04 #14
Har XP men kan det være fordi jeg bruger det komponent der hedder toolbar2000? Der er en anden version af popup menuen (der er federe :))
Avatar billede fun22 Nybegynder
25. april 2003 - 19:52 #15
???
Avatar billede fun22 Nybegynder
26. april 2003 - 10:46 #16
er du væk?
Avatar billede stoney Nybegynder
26. april 2003 - 11:18 #17
Prøv lige at udskrive  værdien af s.
Den drillede også mig i går.
På en almindelige popupmenu er der en ambersand(&) før teksten.
Der for blev jeg nødt til at copy fra position 2
t := copy((Sender as TTBItem).Caption,2 PRØV AT ÆNDRE VÆRDIEN 2
-------------------------------------------------------------
t := copy((Sender as TTBItem).Caption,2,length((Sender as TTBItem).Caption));
begin
IniFile := TIniFile.create(ExtractFilePath(ParamStr(0))+'gamecontrole2.ini');
S := IniFile.ReadString('List',t,'');


Stoney
Avatar billede stoney Nybegynder
26. april 2003 - 11:24 #18
Udskriv værdien af s til en edit box, showmessage er bare blank

Stoney
Avatar billede fun22 Nybegynder
26. april 2003 - 11:44 #19
hold da kæf. Nu viker det jo. Møj fedt
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