Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktion aus Unit1 in Unit3 benutzen (https://www.delphipraxis.net/12688-funktion-aus-unit1-unit3-benutzen.html)

Pseudemys Nelsoni 2. Dez 2003 14:19


Funktion aus Unit1 in Unit3 benutzen
 
Moin,

ich habe die unit1 in der die funktion ist in meiner unit3 eingebunden, wenn ich die funktion in der unit 3 verwenden möchte bekomme ich aber trotzdem

Zitat:

[Fehler] Unit3.pas(97): Undefinierter Bezeichner: 'GetLevel'
[Fataler Fehler] Unit1.pas(74): Verwendete Unit 'Unit3.pas' kann nicht compiliert werden
weiss jemond warum?

mirage228 2. Dez 2003 14:22

Re: Funktion aus Unit1 in Unit3 benutzen
 
in die unit3 schreiben:

Delphi-Quellcode:
uses
  { ... }, Unit1;
voila, fertig :-D

mfG
mirage228

Pseudemys Nelsoni 2. Dez 2003 14:25

Re: Funktion aus Unit1 in Unit3 benutzen
 
unit1 ist in unit3 und unit3 in unit1, deswegen weiss ich nicht wieso das nicht geht :\

unit1 sieht so aus:

uses Unit3, Unit2;


unit3 sieht so aus:

uses Unit1;

Wormid 2. Dez 2003 14:27

Re: Funktion aus Unit1 in Unit3 benutzen
 
Steht die Funktionsdeklaration von GetLevel im Interface-Teil der Unit1?

Pseudemys Nelsoni 2. Dez 2003 14:35

Re: Funktion aus Unit1 in Unit3 benutzen
 
jo, bei den ganzen anderen proceduren die automatisch hinzugefügt werden...also ganz oben unter "type"

ist das falsch?

andianon 2. Dez 2003 14:39

Re: Funktion aus Unit1 in Unit3 benutzen
 
Stehen die "uses unit1" bzw. "uses unit3" jeweils im interface-Teil? Kreuzreferenz?

Thunderchild 2. Dez 2003 14:40

Re: Funktion aus Unit1 in Unit3 benutzen
 
Die automatisch erzeugten Prozeduren dürfen nicht in Private stehen. Wenn dem so ist, verschiebe sie nach public.

Pseudemys Nelsoni 2. Dez 2003 14:42

Re: Funktion aus Unit1 in Unit3 benutzen
 
ich weiss nicht ganz wie das gemeint ist, aber ich habe 2 uses (wie immer) in meinen units, und die units die ich eingebunden habe sind beim 2ten "uses"(warum gibts den teil überhaupt 2mal?)

andianon 2. Dez 2003 14:45

Re: Funktion aus Unit1 in Unit3 benutzen
 
Warum zweimal ist an anderer Stelle nachzulesen. Kannst du die beiden Units posten?

Pseudemys Nelsoni 2. Dez 2003 14:53

Re: Funktion aus Unit1 in Unit3 benutzen
 
klar, wird zwar bisschen viel aber .... :angle2:


also das ist unit1 derzeit:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ToolWin, ComCtrls, StdCtrls, XPMan, ImgList, IdBaseComponent,
  IdAntiFreezeBase, IdAntiFreeze, IdComponent, IdTCPConnection,
  IdTCPClient, IdIRC, ExtCtrls, Mask, Menus;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    XPManifest1: TXPManifest;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    GroupBox2: TGroupBox;
    ListView1: TListView;
    ToolButton6: TToolButton;
    ImageList1: TImageList;
    GroupBox3: TGroupBox;
    ListBox1: TListBox;
    GroupBox4: TGroupBox;
    ListView2: TListView;
    GroupBox5: TGroupBox;
    StatusBar1: TStatusBar;
    IdAntiFreeze1: TIdAntiFreeze;
    IdIRC1: TIdIRC;
    Memo1: TMemo;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    PopupMenu1: TPopupMenu;
    V1: TMenuItem;
    N1: TMenuItem;
    Quiz1: TMenuItem;
    Antwort1: TMenuItem;
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure IdIRC1Notice(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; Content: String);
    procedure IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
      AContent: String; var Suppress: Boolean);
    procedure IdIRC1UserMode(Sender: TObject; AModes: String);
    procedure IdIRC1Message(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; Content: String);
    procedure IdIRC1Quit(Sender: TObject; AUser: TIdIRCUser);
    procedure IdIRC1Part(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel);
    procedure IdIRC1Parted(Sender: TObject; AChannel: TIdIRCChannel);
    procedure IdIRC1Join(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel);
    procedure ToolButton4Click(Sender: TObject);
    procedure IdIRC1Kick(Sender: TObject; AUser, AVictim: TIdIRCUser;
      AChannel: TIdIRCChannel);
    procedure IdIRC1Kicked(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel);
    function GetLevel(nick: string): string;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  benutzer: TStringList;

implementation

uses Unit3, Unit2;

{$R *.dfm}

function GetLevel(nick: string): string;
var
  i: integer;
  match: boolean;
  nilist, lilist: string;
begin
  match := false;
  for i := 0 to Form3.Memo1.Lines.Count-1 do
  begin
    nilist := Copy(Form3.Memo1.Lines.Strings[i], 1, Pos(':', Form3.Memo1.Lines.Strings[i])-1);
    lilist := Copy(Form3.Memo1.Lines.Strings[i], Pos(':', Form3.Memo1.Lines.Strings[i])+1, length(Form3.Memo1.Lines.Strings[i]));
    if nick = nilist then
    begin
      Result := nick + #9 + '[' + lilist + ']';
      match := true;
      break;
    end;
  end;
  if match = false then
  begin
    Result := nick + #9 + '[0]';
  end;
end;




procedure TForm1.ToolButton6Click(Sender: TObject);
begin
  Form3.ShowModal;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  if ToolButton1.Hint = 'Verbinden' then
  begin
    ToolButton1.Hint := 'Trennen';
    ToolButton1.ImageIndex := 2;
    idIRC1.Connect;
  end
  else
  begin
    ToolButton1.Hint := 'Verbinden';
    ToolButton1.ImageIndex := 0;
    idIRC1.Disconnect;
  end;
end;

procedure TForm1.IdIRC1Notice(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel; Content: String);
begin
  if auser.Nick = 'NickServ' then
  begin
    if Content = 'If you do not change within one minute, I will change your nick.' then
    begin
      idirc1.Say('NickServ', 'identify ...');
    end;
    if Content = 'NickServ Your nick isn''t registered.' then
    begin
      idirc1.Say('NickServ', 'register ... ism' + IntToStr(Random(999999)));
      idirc1.Say('NickServ', 'link ism ...');
      idirc1.Join('#night');
    end;
    if Content = 'Password accepted - you are now recognized.' then
    begin
      idirc1.Join('#night');
    end;
  end;
end;




procedure GetNicks(AUser: TIdIRCUser; ACommand, AContent: string);
begin
  Delete(AContent, 1, Pos(':', AContent));
  benutzer := TStringList.Create;
  while Pos(' ', AContent) > 0 do
  begin
    case AContent[1] of
      '*' : Delete(AContent, 1, 1);
      '!' : Delete(AContent, 1, 1);
      '@' : Delete(AContent, 1, 1);
      '%' : Delete(AContent, 1, 1);
      '+' : Delete(AContent, 1, 1);
    end;
    benutzer.Sorted := true;
    benutzer.Add(Copy(AContent, 1, Pos(' ', AContent)-1));
    Delete(AContent, 1, Pos(' ', AContent));
  end;
end;

procedure EndOfNicks(AUser: TIdIRCUser; ACommand, AContent: string);
var
  i: integer;
begin
  for i := 0 to benutzer.Count-1 do
  Form1.ListBox1.Items.Add(GetLevel(benutzer.Strings[i]));
  benutzer.free;
end;






procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
begin
  if ACommand = '353' then GetNicks(AUser, ACommand, AContent);
  if ACommand = '366' then EndOfNicks(AUser, ACommand, AContent);
end;


procedure TForm1.IdIRC1UserMode(Sender: TObject; AModes: String);
begin
  idIRC1.Say('NickServ', 'identify ...');
end;

procedure TForm1.IdIRC1Message(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel; Content: String);
begin
  Memo1.Lines.Add('[' + DateToStr(Now) + '][' + TimeToStr(Now) + '] (' + auser.Nick + ') ' + Content);
end;

procedure TForm1.IdIRC1Quit(Sender: TObject; AUser: TIdIRCUser);
begin
  if auser.Nick <> idirc1.Nick then
  ListBox1.Items.Delete(ListBox1.Items.IndexOf(GetLevel(auser.Nick)))
  else ListBox1.Clear;
end;

procedure TForm1.IdIRC1Part(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel);
begin
  ListBox1.Items.Delete(ListBox1.Items.IndexOf(GetLevel(auser.Nick)));
end;

procedure TForm1.IdIRC1Parted(Sender: TObject; AChannel: TIdIRCChannel);
begin
  ListBox1.Clear;
  memo1.Clear;
end;

procedure TForm1.IdIRC1Join(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel);
begin
  ListBox1.Items.Add(GetLevel(auser.nick));
end;

procedure TForm1.ToolButton4Click(Sender: TObject);
begin
  Form2.ShowModal;
end;

procedure TForm1.IdIRC1Kick(Sender: TObject; AUser, AVictim: TIdIRCUser;
  AChannel: TIdIRCChannel);
begin
  ListBox1.Items.Delete(ListBox1.Items.IndexOf(GetLevel(auser.Nick)));
end;

procedure TForm1.IdIRC1Kicked(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel);
begin
  ListBox1.Clear;
  memo1.Clear;
end;

end.

das ist unit3:

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, registry;

type
  TForm3 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

function CountTok(c: char; s: string): integer;
begin
  Result := 0;
  while Pos(c, s) > 0 do
  begin
    inc(Result);
    Delete(s, 1, Pos(c, s));
  end;
end;


procedure TForm3.Button1Click(Sender: TObject);
begin
 Close;
end;

procedure TForm3.Button2Click(Sender: TObject);
var
  reg: TRegistry;
  i, i2: integer;
  match: boolean;
  cnick, nilist: string;
begin
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CURRENT_USER;
    OpenKey('Software\GCC\ism v2.0', true);
    WriteString('userlist', '');
    for i := 0 to Memo1.Lines.Count-1 do
    begin
      WriteString('userlist', ReadString('userlist') + Memo1.Lines.Strings[i] + ';');
    end;
    CloseKey;
    Free;
  end;
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CURRENT_USER;
    OpenKey('Software\GCC\ism v2.0', true);
    WriteString('banlist', '');
    for i := 0 to Memo2.Lines.Count-1 do
    begin
      WriteString('banlist', ReadString('banlist') + Memo2.Lines.Strings[i] + ';');
    end;
    CloseKey;
    Free;
  end;
  for i := 0 to Form3.Memo1.Lines.Count-1 do
  begin
    match := false;
    for i2 := 0 to Form1.ListBox1.Items.Count-1 do
    begin
      nilist := Copy(Memo1.Lines.Strings[i], 1, Pos(':', Memo1.Lines.Strings[i])-1);
      cnick := Copy(Form1.ListBox1.Items.Strings[i2], 1, Pos(#9, Form1.ListBox1.Items.Strings[i2])-1);
      if cnick = nilist then
      begin
        Form1.ListBox1.Items.Delete(i2);
        Form1.ListBox1.Items.Add(GetLevel(cnick)); // <<< hier der fehler von wegen undefinierte bezeichner
        break;
      end;
    end;
  end;
  Close;
end;

procedure TForm3.FormCreate(Sender: TObject);
var
  reg: TRegistry;
  cKey: string;
begin
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CURRENT_USER;
    OpenKey('Software\GCC\ism v2.0', true);
    cKey := ReadString('userlist');
    while CountTok(';', cKey) > 1 do
    begin
      Memo1.Lines.Add(Copy(cKey, 1, Pos(';', cKey)-1));
      Delete(cKey, 1, Pos(';', cKey));
    end;
    if (Pos(';', cKey) > 0) AND (length(cKey) > 2) then
    Memo1.Lines.Add(Copy(cKey, 1, Pos(';', cKey)-1));
    CloseKey;
    Free;
  end;
  reg := TRegistry.Create;
  with reg do
  begin
    RootKey := HKEY_CURRENT_USER;
    OpenKey('Software\GCC\ism v2.0', true);
    cKey := ReadString('banlist');
    while CountTok(';', cKey) > 1 do
    begin
      Memo2.Lines.Add(Copy(cKey, 1, Pos(';', cKey)-1));
      Delete(cKey, 1, Pos(';', cKey));
    end;
    if (Pos(';', cKey) > 0) AND (length(cKey) > 2) then
    Memo2.Lines.Add(Copy(cKey, 1, Pos(';', cKey)-1));
    CloseKey;
    Free;
  end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz