AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wie geh ich mit units um ?

Ein Thema von dakleene · begonnen am 18. Jan 2004 · letzter Beitrag vom 18. Jan 2004
Antwort Antwort
dakleene

Registriert seit: 2. Jan 2004
Ort: Bremen
9 Beiträge
 
Delphi 5 Enterprise
 
#1

wie geh ich mit units um ?

  Alt 18. Jan 2004, 00:18
Hallo dp'ler

Units soweit ich weiss nutzt man zur u.a. auch zur auslagerung fuer z.B. seine Utility sammlung oder auch damit der source uebersichtlicher bleibt ?!
Korregiert mich bitte wenn ich damit falsch liege, ich versuche mich in sachen programmieren noch nicht allzulange, um genauer zu sein erst seit etwa ein halbes jahr.

um auf den Punkte zukommen habe ich ein komplett neues project begonnen, ich habe nun eine HauptForm mit einer dementsprechenden HauptUnit, auf die HauptForm um bei meinem beispiel zu bleiben habe ich einen Panel und einen Button gepackt.

Wenn ich diesen Button klicke möchte ich dass dynamisch aus einer weiteren Unit (ich nenne sie mal FormloseUnterUnit) ein tWebBrowser auf den Panel kreiert wird.

Bis dahin alles kein problem. Wie jedoch gehe ich dann mit ereignissen um ? Ich moechte die ereignisse nicht in meiner HauptUnit schreiben sondern auch in meine (wie ich sie vorhin genannt und auch weiterhin nun mal nenne) FormloseUnterUnit.

Delphi-Quellcode:
unit HauptUnit;

interface

uses
  ...;

type
  THauptForm = class(TForm)
    vPanel: TPanel;
    Button: TButton;
    ...
    procedure ButtonClick(Sender: TObject);
    ...
  private
  public
    meinDollerBrowser : TWebBrowser;
  end;

var
  HauptForm: THauptForm;

implementation

uses
  FormloseUnterUnit;

{$R *.DFM}

procedure THauptForm.ButtonClick(Sender: TObject);
begin
  kreierMalLos;
end;

end.
Delphi-Quellcode:
unit FormloseUnterUnit;

interface

uses
  SHDocVw;

  procedure kreierMalLos;
  procedure jauNuIsDocumentComplete(Sender: TObject;
    const pDisp: IDispatch; var URL: OleVariant);

implementation

uses
  HauptUnit;

procedure jauNuIsDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  HauptForm.Caption := 'Test erfollgreich';
end;

procedure kreierMalLos;
begin
  HauptForm.meinDollerBrowser :=TWebBrowser.Create(HauptForm.vPanel);
  HauptForm.meinDollerBrowser.Height := 150;
  HauptForm.meinDollerBrowser.Left := 0;
  HauptForm.meinDollerBrowser.Silent := True;
  HauptForm.meinDollerBrowser.Top := 0;
  HauptForm.meinDollerBrowser.Width := 150;
  HauptForm.vPanel.InsertControl(HauptForm.meinDollerBrowser);
  HauptForm.meinDollerBrowser.Navigate ('http://www.google.de');
  HauptForm.meinDollerBrowser.OnDocumentComplete := jauNuIsDocumentComplete; // hier liegt mein Problem
  { mit der Fehlermeldung kann ich leider auch nix anfangen }
end;

end.
Hab ich etwas vergessen, wenn ja was oder habe ich fehler gemacht ?
holla dass ging aber auch schonmal schneller :-d
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#2

Re: wie geh ich mit units um ?

  Alt 18. Jan 2004, 01:30
Wo liegt das Problem genau?

im OnClick-Ereignis rufst du die Prozedur/Funktion aus deiner FormlosenUnterunit auf. Das sieht doch ok aus!

Damit du die zweite unit verwenden kannst musst du sie in der Hauptunit natürlich einbinden.

uses FormloseUnterUnit;
  Mit Zitat antworten Zitat
dakleene

Registriert seit: 2. Jan 2004
Ort: Bremen
9 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Wo liegt das Problem genau?

  Alt 18. Jan 2004, 01:42
Dass habe ich selbstverstaendlich auch gemacht, dass problem liegt darin dass ich in meiner FormlosenUnit kein ereigniss schreiben kann, oehmn,... schreiben wohl schon, jedoch bekomme ich beim kompilieren in der letzten zeile
Code:
  HauptForm.meinDollerBrowser.OnDocumentComplete  := jauNuIsDocumentComplete; // hier liegt mein Problem
die fehlermeldung
'Inkompatible Typen: Methodenzeiger und regulaere Procedure'

F1 gibt vollgendes aus
Zitat:
Der Compiler hat einen Unterschied zwischen der Deklaration und der Verwendung einer Prozedur entdeckt.

program Produce;

type
ProcedureParm0 = procedure; stdcall;
ProcedureParm1 = procedure(var x : Integer);

procedure WrongConvention; register;
begin
end;

procedure WrongParms(x, y, z : Integer);
begin
end;

procedure TakesParm0(p : ProcedureParm0);
begin
end;

procedure TakesParm1(p : ProcedureParm1);
begin

end;

begin
TakesParm0(WrongConvention);
TakesParm1(WrongParms);
end.

Der Aufruf von TakesParm0 löst einen Fehler aus, weil der Typ ProcedureParm0 eine Prozedur stdcall erwartet, während WrongConvention mit der Aufrufkonvention register deklariert wurde. Außerdem wird der Aufruf von TakesParm1 fehlschlagen, weil die Parameterlisten nicht übereinstimmen.

program Solve;

type
ProcedureParm0 = procedure; stdcall;
ProcedureParm1 = procedure(var x : Integer);

procedure RightConvention; stdcall;
begin
end;

procedure RightParms(var x : Integer);
begin
end;

procedure TakesParm0(p : ProcedureParm0);
begin
end;

procedure TakesParm1(p : ProcedureParm1);

begin
end;

begin
TakesParm0(RightConvention);
TakesParm1(RightParms);
end.

Die Lösung für beide Probleme liegt einfach darin, darauf zu achten, daß die Aufrufkonvention bzw. die Parameterlisten mit der Deklaration übereinstimmen.
damit kann ich als anfaenger leider nicht wirklich etwas anfangen.
holla dass ging aber auch schonmal schneller :-d
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: wie geh ich mit units um ?

  Alt 18. Jan 2004, 09:52
pack das ganze einfach in eine Klasse und schon sollte es gehen (also das formloseunit)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
dakleene

Registriert seit: 2. Jan 2004
Ort: Bremen
9 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: wie geh ich mit units um ?

  Alt 18. Jan 2004, 14:05
Oke dann weiss ich nun genauer wo mein Problem liegt!

Wie mach ich dass ?
holla dass ging aber auch schonmal schneller :-d
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz