Avatar billede gtu Nybegynder
28. september 2005 - 18:09 Der er 2 kommentarer og
1 løsning

Hjælp til 2 fejl

TForm1 = class(TForm)
  private
    { Private declarations }
procedure WMSyscommand(Var msg: TWmSysCommand); message WM_SYSCOMMAND;
procedure WMSysMenu(var Msg: TMsg); message WM_SYSCOMMAND;

Fejl: "Duplicate message method index"

hvordan kan jeg fix det?

og en anden ting...

var
  h: hMenu;
begin
  h := GetSystemMenu(TForm(self).handle, false);
  AppendMenu(h, MF_SEPARATOR, 0, '');

Jeg får fejl når jeg bruger denne kode i en function, virker fint hvis det ikke står i en function

Fefl: "Undeclared identifier: 'self'"
Avatar billede hatecaps Nybegynder
29. september 2005 - 09:06 #1
Hejsa,

1. Du forsøger at tildele to forskellige handlere til den samme Message (WM_SYSCOMMAND), jeg er ret sikker på at problemet ligger der.

2. Hvis den funktion du kalder GetSystemMenu ikke er defineret som en del af din form (enten i private eller public eller..), og den altså ser ud som den her

function minFunktion : boolean;
begin

end;

i stedet for

function TForm1.minFunktion : boolean;
begin
end;

så vil "self" ikke pege på en dyt. Det er kun når funktionen er en del af TForm1 at self vil pege på noget. Du kan evt. prøve at bruge application.handle i stedet for TForm(self).handle, i stedet for at omdeklarere din funktion.

håber noget af dette kan hjælpe dig

ha' det godt
hatecaps
Avatar billede gtu Nybegynder
29. september 2005 - 11:16 #2
takker :)

1) Ja, men hvordan kan jeg fix det med Message (WM_SYSCOMMAND)?
Avatar billede tolderlund Nybegynder
30. september 2005 - 15:17 #3
1.
Self peger på den instans af klassen du befinder dig i.
I en form *metode* peger Self på formen selv. Der for TForm(self).handle egentlig noget vrøvl selv om det er korrekt. Du kan nøjes med at skrive Self.Handle eller blot Handle i en form metode.
Når du befinder dig i en almindelig standalone function/procedure findes Self ikke. Så kan du bruge f.eks. Form1.Handle eller hvad det nu er for en form du vil arbejde med.

2.
Du kan ikke have 2 procedurer i den samme form med den samme message, i dette tilfælde message WM_SYSCOMMAND.
Du er nødt til at slette den ene af disse procedurer og lægge koden fra den ind i den anden procedure, så du ender op med en eneste "message WM_SYSCOMMAND" procedure.
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