AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische Programmierung 2 Fragen

Ein Thema von geskill · begonnen am 14. Dez 2007 · letzter Beitrag vom 14. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#1

Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 14:38
Hi,
Ich habe mir die Dynamische Programmierung genauer unter die Lupe genommen, soweit zu gut, leider habe ich 2 Fragen bzw. Probleme.

Erstens möchte ich "SRKIBNewForm : TForm;", "SRKIBNewButton : TButton;", "SRKIBNewWebLabel : TLabel;" in eine PRIVATE deklaration auslagern, da sonst das keiner benutzen soll. Leider kommt dann immer ein Fehler beim erstellen.

Zweitens habe ich ein Problem was das OnClick verhalten auf einen dynamisch erzeugten Button regelt (im TSRKInfoBox.TButtons.Create), ich habe es bereits in einer TYPE deklaration geschafft, jedoch funktioniert es bei mit nicht in einer verschachtelten deklaration.

EDIT:
Ich habe mal eine Testumgebung mit hochgeladen ist womit das ganze für euch vllt. einfacher ist...

Delphi-Quellcode:
unit uSRKInfoBox;

interface

  USES
    Windows, Graphics, StdCtrls, Forms, Controls, ShellApi;

  TYPE TSRKInfoBox = class
       PRIVATE
  TYPE TButtons = record
       PRIVATE

       PROCEDURE SetCaption(ACaption:String='Close');
       FUNCTION GetCaption:String;
       PROCEDURE SetOnClick(Sender: TObject);
       PROCEDURE SetVisible(AVisible:Boolean=TRUE);
       FUNCTION GetVisible:Boolean;
       PUBLIC
       PROCEDURE Create;
       PROPERTY Caption:String READ GetCaption WRITE SetCaption;
       PROCEDURE Show;
       PROPERTY Visible:Boolean READ GetVisible WRITE SetVisible;
       END;


       PROCEDURE SetCaption(ACaption:String);
       PROCEDURE SetColor(Color:TColor);
       PROCEDURE SetHeight(AHeight:Integer);
       PROTECTED
       FFTButtons : TButtons;
       PUBLIC
       PROCEDURE Create;
       PROPERTY Caption:String WRITE SetCaption;
       PROPERTY Color:TColor WRITE SetColor;
       PROCEDURE Free;
       PROPERTY Height:Integer WRITE SetHeight;


       PROCEDURE Show;
       PROPERTY CloseButton:TButtons READ FFTButtons;
       END;



  VAR
    SRKIB:TSRKInfoBox;

    SRKIBNewForm : TForm;
    SRKIBNewButton : TButton;
    SRKIBNewWebLabel : TLabel;

implementation

PROCEDURE TSRKInfoBox.Create;
BEGIN
  SRKIBNewForm := TForm.Create(Application.Owner);
  WITH SRKIBNewForm DO BEGIN
  BorderIcons := [biSystemMenu];
  BorderStyle := bsToolWindow;
  Position := poDesktopCenter;
  END;
END;

PROCEDURE TSRKInfoBox.SetCaption(ACaption:String);
BEGIN
  SRKIBNewForm.Caption := ACaption;
END;

PROCEDURE TSRKInfoBox.SetColor(Color:TColor);
BEGIN
  SRKIBNewForm.Color := Color;
END;

PROCEDURE TSRKInfoBox.Free;
BEGIN
  SRKIBNewForm.Free;
END;

PROCEDURE TSRKInfoBox.SetHeight(AHeight:Integer);
BEGIN
  SRKIBNewForm.Height := AHeight;
END;

PROCEDURE TSRKInfoBox.Show;
BEGIN
  SRKIBNewForm.Show;
END;

///////////////////////////////////////////////////////////////////////////

PROCEDURE TSRKInfoBox.TButtons.Create;
BEGIN
  SRKIBNewButton := TButton.Create(SRKIBNewForm);
  SRKIBNewButton.Parent := SRKIBNewForm;
  //-------------------------------------------\\
  SRKIBNewButton.OnClick := SRKIB.FFTButtons.SetOnClick;
  SRKIBNewButton.OnClick := SRKIB.TButtons.SetOnKlick;
  //-------------------------------------------\\
END;

PROCEDURE TSRKInfoBox.TButtons.SetCaption(ACaption:String='Close');
BEGIN
  SRKIBNewButton.Caption := ACaption;
END;

FUNCTION TSRKInfoBox.TButtons.GetCaption:String;
BEGIN
  result := SRKIBNewButton.Caption;
END;

PROCEDURE TSRKInfoBox.TButtons.SetOnClick(Sender: TObject);
BEGIN
  SRKIBNewButton.Free;
  SRKIBNewForm.Free;
END;

PROCEDURE TSRKInfoBox.TButtons.SetVisible(AVisible:Boolean=TRUE);
BEGIN
  SRKIBNewButton.Visible := AVisible;
END;

FUNCTION TSRKInfoBox.TButtons.GetVisible:Boolean;
BEGIN
  result := SRKIBNewButton.Visible;
END;

PROCEDURE TSRKInfoBox.TButtons.Show;
BEGIN
  SRKIBNewButton.Show;
END;
MFG
geskill

PS: Das Dynamische Feld wird von einem Formular gestartet, wobei folgende Proceduren benutzt werden

Delphi-Quellcode:
  SRKIB.Create;
  SRKIB.Caption := 'AAA';
  SRKIB.CloseButton.Create;
  SRKIB.CloseButton.Caption := 'a';
  SRKIB.CloseButton.Show;
  SRKIB.Show;
Angehängte Dateien
Dateityp: zip testumgebung_114.zip (226,0 KB, 3x aufgerufen)
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 14:54
uj, was machst du denn da? Entweder hab ich mich beim anschauen wegen der teilweise nicht vorhandenen einrückung vertran oder du hast einen Record der Methoden und private Member hat?

Zitat:
Leider kommt dann immer ein Fehler beim erstellen.
hier wäre es sehr sinnvoll zu wissen was für ein Fehler kommt
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 15:09
Zum Beispiel wenn ich "VAR SRKIBNewButton : TButton;" in den PRIVATE Teil verlagere

Delphi-Quellcode:
       //[...]
  TYPE TSRKInfoBox = class
       PRIVATE
  TYPE TButtons = record
       PRIVATE
       
       VAR SRKIBNewButton : TButton;
       
       PROCEDURE SetCaption(ACaption:String='Close');
       FUNCTION GetCaption:String;
       //[...]
Dann kommt ein Fehler "Access violation at address [...]". Ich habe jetzt nicht in ein Wörterbuch geschaut aber das müsste eine Zugriffsverletzung sein, wobei man falsch oder mehrfach auf die Variable zugreift, aber so genau weiß ich es auch nicht...

MFG
Sebastian
  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: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 15:13
an welcher Adresse kommt die Access Violation? Ich vermute fast das du vergessen hast die Instanz zu erzeugen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 15:17
Zitat:
an welcher Adresse kommt die Access Violation?
Das sind zwar nur Zahlen aber okay "Access violation at address 00456CB0 in module 'Projekt 1.exe'. Write of Address 0000004"

Zitat:
Ich vermute fast das du vergessen hast die Instanz zu erzeugen
Das kann sehr gut sein weil ich nicht weiß was du damit meinst :?

EDIT:

Ich habe das mit der neuen Instanz hinbekommen :-D, dafür schon mal danke :thumb:

CLASS VAR SRKIBNewButton : TButton; MFG
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 15:46
Leider habe ich immer noch das weitere Problem
Zitat:
du hast einen Record der Methoden und private Member hat?
Ja, und ich habe Probleme beim richtigen Zugriff darauf, ich habe den Code noch etwas "Eingerückt"

Delphi-Quellcode:
//[...]
  TYPE TSRKInfoBox = class
   PRIVATE
       CLASS VAR SRKIBNewForm : TForm;
       CLASS VAR SRKIBNewButton : TButton;
       CLASS VAR SRKIBNewWebLabel : TLabel;
       TYPE TButtons = record
        PRIVATE
            PROCEDURE SetCaption(ACaption:String='Close');
            FUNCTION GetCaption:String;
            PROCEDURE SetOnKlick(Sender: TObject);
            PROCEDURE SetVisible(AVisible:Boolean=TRUE);
            FUNCTION GetVisible:Boolean;

        PUBLIC
            PROCEDURE Create;
            PROPERTY Caption:String READ GetCaption WRITE SetCaption;
            PROCEDURE Show;
            PROPERTY Visible:Boolean READ GetVisible WRITE SetVisible;
       END;

//[...]

PROCEDURE TSRKInfoBox.TButtons.Create;
BEGIN
  SRKIBNewButton := TButton.Create(SRKIBNewForm);
  SRKIBNewButton.Parent := SRKIBNewForm;
  SRKIBNewButton.OnClick := ???
END;

//[...]

PROCEDURE TSRKInfoBox.TButtons.SetOnKlick(Sender: TObject);
BEGIN
  SRKIBNewButton.Free;
  SRKIBNewForm.Free;
END;

//[...]
Ich habe schon alles mögliche versucht wie:

Delphi-Quellcode:
SRKIBNewButton.OnClick := SRKIB.TButtons.SetOnKlick;
// Feld oder Methodenbezeichner erwartet
Delphi-Quellcode:
SRKIBNewButton.OnClick := SRKIB.FFTButtons.SetOnKlick;
// Access violation at address [...] -> in CLASS Funktioniert nicht :-(
MFG
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 15:51
jehu ^^

Problem gelöst ...
Uns zwar mit einer "CLASS VAR Button : TButtons;" VAR leider nicht das Beste (geht bestimmt auch anders...) aber so gehts ...
Delphi-Quellcode:
       TYPE TButtons = record
        PRIVATE
            
            CLASS VAR Button : TButtons;
            
            PROCEDURE SetCaption(ACaption:String='Close');
            FUNCTION GetCaption:String;
            PROCEDURE SetOnKlick(Sender: TObject);
            PROCEDURE SetVisible(AVisible:Boolean=TRUE);
            FUNCTION GetVisible:Boolean;

        PUBLIC
            PROCEDURE Create;
            PROPERTY Caption:String READ GetCaption WRITE SetCaption;
            PROCEDURE Show;
            PROPERTY Visible:Boolean READ GetVisible WRITE SetVisible;
       END;
SRKIBNewButton.OnClick := Button.SetOnKlick;
Sebastian
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 17:11
Ich habe das Gefühl, dass du nicht wirklich weißt, was du wirklich machst. Zum einen ist die von SirThomberry schon angesprochene Ausrichtung und Formatierung schlecht bis gar nicht übersichtlich und zum anderen sind grundlegende Fehler enthalten. Ich würde dir vor allem erstmal ein OOP Tutorial empfehlen, schon allein wenn ich sehe, dass du eine Methode (!) namens Create angelegt hast. Auch würde ich gerne mal von dir hören, was denn die Angabe von "class" zu bedeuten hat - also mit deinen eigenen Worten...
  Mit Zitat antworten Zitat
Benutzerbild von DasZiesel
DasZiesel

Registriert seit: 26. Dez 2004
Ort: Leipzig
58 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 17:12
Alles in Großbuchstaben. Oje, kann es sein das du vorher in Basic programmiert hast?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Dynamische Programmierung 2 Fragen

  Alt 14. Dez 2007, 17:26
Zitat von geskill:
Das sind zwar nur Zahlen aber okay "Access violation at address 00456CB0 in module 'Projekt 1.exe'. Write of Address 0000004"
Diese Zahlen sind Gold wert
Zumeist ist die Basisadresse $40000 (oder so ähnlich). Wenn also eine Zugriffsverletzung beim Lesen oder schreiben in viel niedrigeren Regionen um die 0 stattfinden sieht man sofort ob ein Object instanziert wurde oder nicht. Und in deinem Fall wird versucht an Adresse 4 zu schreiben. Somit hast du wohl eine Instanz welche nil ist und greifst auf eine Variable zu welche an Offset 4 ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:50 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