Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Abstrakter Fehler (https://www.delphipraxis.net/110803-abstrakter-fehler.html)

steppo 25. Mär 2008 01:40


Abstrakter Fehler
 
Hallo Leute,

ich rufe aus meinem Programm ein neues Formular auf. Im Formshow erzeuge ich einige Komponenten, unter anderem zwei Buttons. Beide Buttons haben das Ereignis OnClick. Solange ich nur einem Button ein Ereignis zuweise funktioniert alles hervorragend. Sobald ich das zweite Erreignis angebe bekomme ich den Fehler "Abstrakter Fehler".

Delphi-Quellcode:
for i := 1 to 2 do
  begin
    dynButton := TButton.Create(self);
    with dynButton do
    begin
      parent := self;
      Name := 'dynButton' + inttostr(i);
      if i = 1 then
      begin
        caption := '&Abbrechen';
        OnClick := Abbrechen;
      end
      else
      begin
        Caption := 'Datensatz &einfügen';
        OnClick := Datensatz_einfuegen;
      end;
      Width := 105;
      Height := 25;
      left := posButton - ((i - 1) * 105) - ((i - 1) * 10);
      top := (pntPosition.Y + 1) * 50;
    end;
  end;
In der Abbrechen Methode wird lediglich ein boolscher Wert geändert und "Close" aufgerufen.
In der Datensatz_einfuegen Methode wird ebenfalls ein boolscher Wert gesetz und "Close" aufgerufen.

In FormClose werden dann alle Komponenten, auch die Buttons mittels free wieder freigegeben.

Wie gesagt, solange ich nur das Abbrechen Ereignis implementiere funktioniert es.
Kann mir jemand sagen warum das so ist, und wie ich das Problem behebe.

Gruß Steppo

Hansa 25. Mär 2008 01:48

Re: Abstrakter Fehler
 
Schön, dass du irrelevanten Sourcecode zeigst. :mrgreen: Entscheidend ist die Definition davon und die sehe ich nicht.

steppo 25. Mär 2008 01:54

Re: Abstrakter Fehler
 
Was meinst du mit irrelevanten Sourcecode. So erstelle ich die Buttons.

Meinst du die beiden Methoden, die über das Ereignis ausgelöst werden?

Die Muhkuh 25. Mär 2008 01:58

Re: Abstrakter Fehler
 
Zitat:

Zitat von steppo
Meinst du die beiden Methoden, die über das Ereignis ausgelöst werden?

Die meint er

steppo 25. Mär 2008 02:01

Re: Abstrakter Fehler
 
Also die, die ich bei meiner Erstellung des Threads aufgeführt habe. O.K.

Delphi-Quellcode:
procedure Tfrm_insertValues.Abbrechen(Sender: TObject);
begin
  boolABortClicked := True;
  Close;

end;

procedure Tfrm_insertValues.Datensatz_einfuegen(Sender: TObject);
begin
  boolABortClicked := False;
  Close;

end;
Gru?ß steppo

dominikkv 25. Mär 2008 02:10

Re: Abstrakter Fehler
 
Wo hast du die 2 Proceduren deklariert?

steppo 25. Mär 2008 08:19

Re: Abstrakter Fehler
 
Im Abschnitt private
Delphi-Quellcode:
unit Insert;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Contnrs, StdCtrls, Mask, DBCtrls, DB;

type
  Tfrm_insertValues = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure Abbrechen(Sender: TObject);
    procedure Datensatz_einfuegen(Sender: TObject);
    procedure Check_DataType(Sender: TObject);

    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frm_insertValues: Tfrm_insertValues;
  dynOLComponents: Tobjectlist;
  dynEdit: TDBEdit;
  dynLabel: TLabel;
  dynButton: TButton;
  boolABortClicked: Boolean;
implementation

Kroko1999 25. Mär 2008 08:26

Re: Abstrakter Fehler
 
Du musst die dyn. erstellten Buttons nicht mehr freigeben, dadurch dass Du parent gesetzt hast, kümmert sich dieser darum, und Du gibt sie dann ein 2.Mal frei und erzeugst den Fehler!
(a) Brauchst Du die globalen Variablen?
(b) Ich würde die Unit nicht Insert nennen, wenn du System.Insert o.ä. mal brauchst suchst Du schon ein Weilchen!

steppo 25. Mär 2008 09:56

Re: Abstrakter Fehler
 
Hallo Kroko1999,

das habe ich auch versucht. Rufe ich das Formular jedoch ein weiteres mal auf, so wird ein Fehler erzeugt, der da sagt, dass es bereits einen Button mit diesem Namen gibt.

TBx 25. Mär 2008 10:08

Re: Abstrakter Fehler
 
Zitat:

Zitat von steppo
Hallo Kroko1999,

das habe ich auch versucht. Rufe ich das Formular jedoch ein weiteres mal auf, so wird ein Fehler erzeugt, der da sagt, dass es bereits einen Button mit diesem Namen gibt.

klar, solche Erzeugungen gehören auch ins OnCreate :-)

Gruß

onlinekater


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.
Seite 1 von 2  1 2   

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