Avatar billede data2k.dk Nybegynder
11. april 2001 - 03:21 Der er 34 kommentarer og
1 løsning

??????????

Jeg ville gerne vide 2 ting...

1. Er det muligt, at fjerne højre musseknap funktionen når man starter mit program. Den skal virke igen når man lukker for programmet igen.

2. Jeg har webbrowser1 componentet på min form er det muligt at gøre sådan, at hvis brugeren har klikket på knappen, som er inde i webbrowseren så blive adgangs knappen enabled. (en knap, som åbner en anden form)

kan man regne positionen ud eller lignende. Hvis der bliver klikket på denne position så bliver knappen enabled?


tak for hjælpen
Avatar billede data2k.dk Nybegynder
11. april 2001 - 03:27 #1
hmmmmm...den var vidst svær
Avatar billede nomiz Nybegynder
11. april 2001 - 03:35 #2
næh, eksperten er bare død! Du burde oprette sådanne spm. i \"myldretiden\" på eksperten, så skal der nok komme noget!
Avatar billede data2k.dk Nybegynder
11. april 2001 - 03:39 #3
du sover aldrig
Avatar billede nikolajdu Nybegynder
11. april 2001 - 04:06 #4
Jeg sover heller aldrig.. *ggg*
Avatar billede nico26 Nybegynder
11. april 2001 - 05:55 #5
Dette skulle deaktivere højre musseknap:

type
  TForm1 = class(TForm)
    lb: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

function MouseHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;

var
  Form1: TForm1;
  Hook: HHook;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Hook := SetWindowsHookEx(WH_MOUSE, @MouseHook, 0, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnhookWindowsHookEx(Hook);
end;

function MouseHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult;
begin
  if nCode > -1 then
  begin
    if (wParam = 516) or (wParam = 517) then
      Result := 1
    else
      Result := 0;
  end
  else
    Result := CallNextHookEx(Hook, nCode, wParam, lParam);
end;
Avatar billede snowball Novice
11. april 2001 - 06:19 #6
nico22: Det var da en masse unødvendig kode for så\'n en lille ting ! Nedenstående kode gør nøjagtig det samme:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  If button = mbRight then
    ;
end;

Snowball
Avatar billede nico26 Nybegynder
11. april 2001 - 06:32 #7
snowball>>Det virker jo kun inden for applikationen. Min kode virker i hele systemet, og det var sådan jeg forstod spørsmålet
Avatar billede nico26 Nybegynder
11. april 2001 - 06:33 #8
her er et eksempel på hvordan man fanger et klik på et HTMLDokument. Det er besværligt, men det er den eneste løsning jeg kender til:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, SHDocVw_TLB, MSHTML_TLB;

type
  THTMLNotifyEvent =
    procedure(EventObject: IHTMLEventObj; EventType: string) of object;

  THTMLClickEvent = class(TInterfacedObject, IDispatch)
  private
    FDoc: IHTMLDocument2;
    FOnClick: THTMLNotifyEvent;
    function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
    function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
    function GetIDsOfNames(const IID: TGUID; Names: Pointer;
      NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
      Flags: Word; var Params; VarResult, ExceptInfo, ArgErr: Pointer): HResult; stdcall;
    procedure DoClick;
  public
    property Doc: IHTMLDocument2 read FDoc write FDoc;
    property OnClick: THTMLNotifyEvent read FOnClick write FOnClick;
  end;

  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure WebBrowser1NavigateComplete2(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure FormCreate(Sender: TObject);
  private
    FEvent: THTMLClickEvent;
    FDoc: IHTMLDocument2;
    procedure WebDocClick(EventObject: IHTMLEventObj; EventType: string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  ComObj;

{$R *.DFM}

{ THTMLClickEvent }

function THTMLClickEvent.GetTypeInfoCount(out Count: Integer): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end;

function THTMLClickEvent.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end;

function THTMLClickEvent.GetIDsOfNames(const IID: TGUID; Names: Pointer;
  NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
begin
  Result := E_NOTIMPL;
end;

function THTMLClickEvent.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
  Flags: Word; var Params; VarResult, ExceptInfo, ArgErr: Pointer): HResult; stdcall;
begin
  DoClick;
  Result := S_OK;
end;

procedure THTMLClickEvent.DoClick;
var
  EventObj: IHTMLEventObj;
  EventType: string;
begin
  if Assigned(FOnClick) then
  begin
    EventObj := nil;
    EventType := \'\';

    if Assigned(FDoc) and Assigned(FDoc.parentWindow) then
    begin
      EventObj := FDoc.parentWindow.event;
      if Assigned(EventObj) then
        EventType := EventObj.type_;
    end;

    FOnClick(EventObj, EventType);
  end;
end;

procedure TForm1.WebDocClick(EventObject: IHTMLEventObj; EventType: string);
begin
  ShowMessage(Format(\'X: %d, Y: %d\', [EventObject.x, EventObject.y]));
end;

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  FDoc := WebBrowser1.Document as IHTMLDocument2;
  FEvent.Doc := FDoc;
  FEvent.OnClick := WebDocClick;

  FDoc.onclick := FEvent as IDispatch;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FEvent := THTMLClickEvent.Create;
  WebBrowser1.Navigate(\'URL\', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

end.
Avatar billede snowball Novice
11. april 2001 - 06:34 #9
nico22: Jeg kan altså stadig højre klikke alle andre steder end på formen selvom jeg bruger din kode !!! ;)

Snowball
Avatar billede nico26 Nybegynder
11. april 2001 - 06:37 #10
snowball>> ja du kan klikke, men der kommer da ikke nogen popupmenu. Du har måske et bedre forslag ;)
Avatar billede snowball Novice
11. april 2001 - 06:38 #11
Nico22: Jo, det er netop det der gør ! ;)

Snowball
Avatar billede nico26 Nybegynder
11. april 2001 - 06:40 #12
jeg har afprøvet det på to pcer nu, og det virker her
Avatar billede snowball Novice
11. april 2001 - 07:22 #13
Nu har jeg prøvet på både en Win2k og en Win95 og jeg kan stadig ikke få det til at virke! På en lidt langsom Win95 PC gør koden faktisk at den bruger næsten 100% af processoren når musen kommer udenfor formen !

Du har vel ikke skrevet et eller andet oppe i Uses som ikke står der som standard !?

Snowball
Avatar billede data2k.dk Nybegynder
11. april 2001 - 09:32 #14
hvad med spørgsmål nr 2? I må gerne bruge notater så jeg kan følge med
Avatar billede nico26 Nybegynder
11. april 2001 - 09:43 #15
det er en måde at implementere com events på. Problemet er at TWebBrowser ikke har en onclick event, så man er nødt til at bruge IHTMLDocument2\'s onclick.
Avatar billede nico26 Nybegynder
11. april 2001 - 09:44 #16
hvad med spørgsmål 1 - virker det på din maskine?
Avatar billede data2k.dk Nybegynder
11. april 2001 - 09:57 #17
Jeg er ikke hjemme lige nu, så jeg har endu ikke prøvet det. IHTMLDocument2 er dette et component der følger med delphi 5? Hvis ikke hvor kan jeg få det henne. Du må gerne vise et eksempel på hvordan man skal bruge det.
Avatar billede nico26 Nybegynder
11. april 2001 - 10:13 #18
IHTMLDocument2 er bare et interface. Hvis du kikker i SHDocVw_TLB og MSHTML_TLB, der følger med TWebBrowser vil du finde utallige interfaces, som alle udgør en del af TWebBrowser. IHTMLDocument2 er det interface der repræsenterer det aktuelle dokument i browseren, og ud over events, er der også nogle metoder du kan bruge, men kik i ovenstående units, og prøv at eksperimenter med det. Teknologien hedder ActiveX, som mange af microsofts produkter bygger på, og på samme måde kan du automatisere Word og Excel ved bare at importere det tilknyttede type library
Avatar billede nico26 Nybegynder
11. april 2001 - 14:27 #19
hvis ikke det med musseknappen virker, kan du evt. prøve det her i stedet for:

Hook := SetWindowsHookEx(WH_MOUSE, @MouseHook, 0, GetCurrentThreadID);

det virker kun inden for selve applikationen
Avatar billede data2k.dk Nybegynder
14. april 2001 - 21:38 #20
hmmm.. Jeg skal nok give point, men jeg vil gerne lige have et godt svar for nr. 2 spørgsmål...Et eksempel med source ville være rart
Avatar billede nico26 Nybegynder
14. april 2001 - 21:39 #21
hvad er det præcis du vil ha
Avatar billede data2k.dk Nybegynder
14. april 2001 - 21:46 #22
Kan du ikke lave et eksempel med source og sende den til mig?
Det jeg vil have er:
Først lidt info
Jeg har 3. Knapper og componentet webbrowser på form 1.
Når der klikkes på knap et så navigere min webbrowser1 component overtil min hjemmeside hvor der er en disclaimer og 2 knapper. Når der klikkes på knap et...agree knappen så er knap 2 på formen enabled:=true; Resten behøver du ikke at tænke over når der bliver svaret rigtig på dette så kan jeg klare resten selv.

Hvorfor jeg vil have disclaimeren her er fordi så kan jeg ændre den og ændre news.

Takker
Avatar billede data2k.dk Nybegynder
14. april 2001 - 22:05 #23
hvis det er nødvendigt så kan jeg sende dig den html fil med knappen på
Avatar billede nico26 Nybegynder
14. april 2001 - 22:06 #24
De knapper du snakker om, er det Delphi knapper eller knapper på hjemmesiden, eller begge dele
Avatar billede nico26 Nybegynder
14. april 2001 - 22:09 #25
hvad højre musseknap - fik du det til at virke
Avatar billede data2k.dk Nybegynder
14. april 2001 - 22:13 #26
og højre musseknap tingen har jeg ikke prøvet endnu
Avatar billede nico26 Nybegynder
14. april 2001 - 22:31 #27
du må godt sende HTML dokumentet på brodersalsa@mail.dk

og det du vil ha, er at når man trykker på en html-knap, bliver en delphi-knap enabled. Er det rigtigt forstået???
Avatar billede data2k.dk Nybegynder
14. april 2001 - 22:34 #28
ja, jeg sender den om lidt
Avatar billede data2k.dk Nybegynder
14. april 2001 - 22:40 #29
sendt
Avatar billede nico26 Nybegynder
14. april 2001 - 22:59 #30
jeg kigger på det. Er næsten sikker på at det kan lade sig gøre
Avatar billede nico26 Nybegynder
15. april 2001 - 04:37 #31
Hvis det er Delphi5 du bruger skal du skifte SHDocVw_TLB og MSHTML_TLB ud med SHDocVw og MSHtml. De ligger i source\\internet
Avatar billede data2k.dk Nybegynder
15. april 2001 - 10:27 #32
det virked perfekt..... jeg åbner et spørgsmål så du kan få dine point.    giver det navnet  100000 nico22    så skal du bare søge og den er der
Avatar billede data2k.dk Nybegynder
15. april 2001 - 11:10 #33
jeg kan da sige noget......en javascript knappe har en value....det var den nico brugte så delphi kunne regne ud når der blev klikket på den
Avatar billede nico26 Nybegynder
15. april 2001 - 13:38 #34
data2k.dk>>det er id man søger efter
Avatar billede data2k.dk Nybegynder
15. april 2001 - 14:11 #35
ok, men det virker
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