[delphi] form.create nieuwe form doet raar

Pagina: 1
Acties:

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 08-09 11:48
ik heb een simpel browsertje gemaakt

als er nu een nieuwe venster geopend word doe ik het volgende
code:
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
  NewWindow: TForm1;
begin
  // a new instance of the form will be created
  NewWindow := TForm1.Create(self);

  NewWindow.Show;
  ppDisp := NewWindow.Webbrowser1.DefaultDispatch;
end;

het nieuwe venster wordt netjes geopend met de nieuwe URL maar dingen zoals "procedure TForm1.FormResize(Sender: TObject);" werken niet in het nieuwe form

is er niet zoiets als een "this" ofzo of een andere oplossing :?

PSN jschut_82 | Xbox: JSchut82


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Equivalent van 'this' in Delphi is 'Self'

https://fgheysels.github.io/


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Forms geef je nooit self mee... Forms geef je Application als owner.

Forget your fears...
...and want to know more...


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 08-09 11:48
ok dat heb ik geprobeerd maar dat snapt ie niet helemaal hoe kan je aangeven dat ie bepaalde procedures alleen bij het nieuwe form mag gebruiken ?

PSN jschut_82 | Xbox: JSchut82


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Op maandag 13 mei 2002 12:19 schreef Aetje het volgende:
Forms geef je nooit self mee... Forms geef je Application als owner.
Daar ben ik niet mee akkoord. Onderbouw dat eens?

Wat als je een Form creert waarvan een andere Form de owner is?

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08-09 20:49

Creepy

Tactical Espionage Splatterer

Hoe bedoel je "werken niet"??

Benader je in de events keihard form1? Dat moet je niet doen natuurlijk. Self benaderd het object waar je op dat moment "in zit". Sender is diegene die het event aangeroepen heef (dus een sender van een onresize event benadert het form dat geresized wordt).

En forms alleen de application als onwner geven.. Dat doe ik alleen als de forms op zichzelf staan zijn. Maar popup-dialogs, settings schermen (eigenlijk alles wat modal getoond word) etc. geef ik altijd als ownder het aanroepende form mee.
En dan zit je ook nog met forms in DLL's. Wat doe je dan? Want appliction is dan niet de applicatie die je DLL laadt, en als de aanroepende applicatie geen Delphi of Borland C++ Builder is dan hoef je dus geen TComponente te hebben om door te geven als parent.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 08-09 11:48
ik doe nu bijv TForm1.FormCreate
maar Self.FormCreate doet het niet

daarom vat ik het nu niet meer helemaal :?

PSN jschut_82 | Xbox: JSchut82


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08-09 20:49

Creepy

Tactical Espionage Splatterer

Een form creeeren doe je in je code al goed (newwindow:=TFOrm1.Create(self)). Dat zou zonder problemen moetwen werken.

Maar wat doe je in je events ?? Benader je daar Form1, newwindow, self of sender? En wat gaat er precies mis bij het aanroepen van de events? Doen ze helemaal niks? Doen ze iets op het verkeerde form? Krijg je een crash?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 08-09 11:48
ze doen het idd op het verkeerde form

hier een procedure die het dus verkeerd doet
code:
1
2
3
4
5
procedure TForm1.WebBrowser1TitleChange(Sender: TObject;
  const Text: WideString);
begin
  form1.Caption := webbrowser1.LocationName;
end;

PSN jschut_82 | Xbox: JSchut82


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 08-09 11:48
hier een deel van me code
code:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure WebBrowser1NewWindow2(Sender: TObject;
    var ppDisp: IDispatch; var Cancel: WordBool);
    procedure WebBrowser1TitleChange(Sender: TObject;
    const Text: WideString);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
  NewWindow: TForm1;
begin
  // a new instance of the form will be created
  NewWindow := TForm1.Create(self);
  NewWindow.Show;
  ppDisp := NewWindow.Webbrowser1.DefaultDispatch;
end;

procedure TForm1.WebBrowser1TitleChange(Sender: TObject;
  const Text: WideString);
begin
  form1.Caption := webbrowser1.LocationName;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
      webbrowser1.Navigate('www.msn.nl');
end;

end.

PSN jschut_82 | Xbox: JSchut82


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08-09 20:49

Creepy

Tactical Espionage Splatterer

Op maandag 13 mei 2002 13:32 schreef JSchut het volgende:
ze doen het idd op het verkeerde form

hier een procedure die het dus verkeerd doet
code:
1
2
3
4
5
procedure TForm1.WebBrowser1TitleChange(Sender: TObject;
  const Text: WideString);
begin
  form1.Caption := webbrowser1.LocationName;
end;
Ah.. dus toch.. Je benaderd de form1 variabele in je event, maar na een Tform1.create is je nieuwe form wel van het type TForm1, maar niet hetzelfde als de variabele Form1.

Dus self gebruiken, zou zonder problemen moeten werken:
code:
1
self.caption := webbrowser1.LocationName;

Mocht je nou meerdere TWebbrowsers op je form hebben (stel he :) ) dan zou een
code:
1
self.caption := (sender as TWebBrowser).LocationName;

ook moeten werken. Want de WebBrowser1TitleChange wordt gegenereerd door een TWebBrowser (in dit geval webbrowser1)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 08-09 11:48
ja idd thnx

PSN jschut_82 | Xbox: JSchut82

Pagina: 1