AGB  ·  Datenschutz  ·  Impressum  







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

Neue Komponente erstellen

Ein Thema von Hansa · begonnen am 9. Feb 2003 · letzter Beitrag vom 11. Feb 2003
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Neue Komponente erstellen

  Alt 9. Feb 2003, 18:45
Hi,

ich versuche gerade eine neue Komponente zu erstellen, die folgenden Anforderungen genügen soll:

1. Hauptfunktionalität soll von DBedit geerbt werden.
2. Im OI soll noch das zu jedem Feld passende Label angegeben werden können.
3. Das Label sollte zumindest immer in derselben Zeile stehen, wie das DBedit. Falls möglich sollte es allerdings unabhängig vom DBedit vergrößert / verkleinert werden können.
4. Die kombinierte Komponente aus Label und DBedit sollte sich nur gemeinsam platzieren / entfernen lassen.

Ich habe es so ungefähr versucht :

Code:
  TDBEditLabel = class(TDBEdit)
  private
    FDBeditLabel : TLabel;
  protected
    procedure SetLabel;
  public
    { Public declarations }
  published
    property DBEditLabel write SetDBLabel;
    { Published declarations }
  end;
Das ist grober Unfug meint der Compiler. Aber wo er Recht hat hat er Recht. So ähnlich habe ich es jedenfalls hingekriegt, daß die neue Komponente in der Objektablage drin war, aber vom Label war nichts zu sehen. Das mit dem read und write im published Abschnitt ist mir auch noch nicht ganz klar. Meine "neue" Komponente verhielt sich ganz so wie ein DBedit. Kann mir jemand erklären, wo jetzt genau was deklariert werden muß ?

Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#2
  Alt 9. Feb 2003, 23:29
Hallo Hansa,

ich hab' mich bisher immer vor Komponenten gedrückt, aber vielleicht ist ja Deine Komponente eine Möglichkeit in das Thema einzusteigen. Ganz einfach ist ja die Materie nicht.

Ich habe schon mal ein bischen angefangen und kann den Text für das Label im OI eingeben. Und schon stecke ich fest!

Wie bekomme ich das Ding auch noch gezeichnet?
Ich würde zuerst das Label über dem Feld zeichnen wollen also auf den Koordinaten Left und Top-24, später kann man das ja verfeinern.


Delphi-Quellcode:
unit DBEditLabel;

interface

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

type
  TDBEditLabel = class(TDBEdit)
  private
    { Private-Deklarationen }
    FLblCaption : TCaption;
    function RdLblCaption : TCaption;
    procedure WrLblCaption(val : TCaption);

  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property LblCaption : TCaption read FLblCaption write FLblCaption;
// property LblFont : TFont;
// property LblLeft : Integer;
// property LblTop : Integer;
// property LblWidth : Integer;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TDBEditLabel]);
end;

function TDBEditLabel.RdLblCaption : TCaption;
begin
  Result := FLblCaption;
end;

procedure TDBEditLabel.WrLblCaption(val : TCaption);
begin
  FLblCaption := val;
end;

end.
Hätte also nichts dagegen die Entwicklung dieser Komponente mit Dir und anderen Helfern hier so durchzuziehen, daß man was lernen kann.

mfg
eddy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 10. Feb 2003, 00:18
Hi Eddy,

das geht ja runter wie Öl 1+1 ist dann schon mal drei Der Zeitpunkt ist allerdings schlecht von mir gewählt. Woher soll ich denn wissen, daß die Kerle AGBs veröffentlichen.

@Daniel : Das geht aber wohl nicht anders. Das ist schon richtig so. Nützen werden sie aber nicht. Irgendein Heini bringt Dich trotzdem vor den Kadi. Zu den Einzelheiten schicke ich Dir per PN noch eine Stellungnahme.

Jetzt egal, habe mir das ausgedruckt und zugestimmt.

@Eddy: Ja dann gehts halt weiter, Thema ist für mich nicht neu, aber noch nicht intensiv bearbeitet. Kriege die Teile in die Objektablage aber nicht in OI. Deine Source habe ich mir jetzt mal ausgedruckt und lese sie noch durch, Rest dann morgen.

Gruß
Hansa
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#4
  Alt 10. Feb 2003, 01:03
So funzt das doch nie.

Mal auf die Schnelle zum Weiterbasteln:

Delphi-Quellcode:
unit DBEditLabel;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Mask, DBCtrls;

type
  TDBEditLabel = class(TDBEdit)
  private
    FCaption: WideString;
    FLabel: TLabel;
    procedure SetLabelPosition;
    procedure SetCaption(Value: WideString);
  protected
    procedure SetParent(AParent: TWinControl); override;
    procedure SetName(const Value: TComponentName); override;
  public
    constructor Create(aOwner: TComponent); override;
    procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer); override;
  published
    property DBEditCaption: WideString read FCaption write SetCaption;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Zusätzlich', [TDBEditLabel]);
end;

{ TDBEditLabel }

constructor TDBEditLabel.Create(aOwner: TComponent);
begin
  inherited;
  FLabel := TLabel.Create(aOwner);
end;


procedure TDBEditLabel.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);
  SetLabelPosition;
end;

procedure TDBEditLabel.SetCaption(Value: WideString);
begin
  if Value <> FCaption then
  begin
    FCaption := Value;
    FLabel.Caption := Value;
  end;
end;

procedure TDBEditLabel.SetLabelPosition;
begin
  if FLabel <> nil then
  begin
    FLabel.Top := Top - FLabel.Height - 5;
    FLabel.Left := Left + 5;
  end;
end;

procedure TDBEditLabel.SetName(const Value: TComponentName);
begin
  if (csDesigning in ComponentState) and ((FLabel.GetTextLen = 0) or
     (CompareText(FLabel.Caption, Name) = 0)) then
    FLabel.Caption := Value;
  inherited SetName(Value);
  if csDesigning in ComponentState then
    Text := '';
end;

procedure TDBEditLabel.SetParent(AParent: TWinControl);
begin
  inherited;
  FLabel.Parent := aParent;
end;

end.
Ein Fehler ist drin: Wenn man diese Komponente benutzt und die Appl startet kommt: EClassNotFound (TLabel).
Gibts ein Label im Form dieser Kompo gehts.
Jemand ne Idee was da flash ist?

Prost!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5
  Alt 10. Feb 2003, 01:10
Zitat:
So funzt das doch nie.
Jo, hab das auch schon bemerkt. Ich hänge an einer Frage fest: Was hat das vorangestellte F zu bedeuten? z.B. FlabeledEdit (nicht jetzt bei Dir). Ich will das im OI haben, ähnlich wie das TLabeledEdit.

naja, mal sehen.

Gruß
Hansa
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#6
  Alt 10. Feb 2003, 01:39
Das "F": Namenskonventionen.
Kannste hier nachlesen http://www.grundlagen.delphi-source....entionen.shtml

Im OI steht der nach property (published) definierte Ausdruck.
Zum Bleistift DBEditCaption wenn du meinen Kram als Kompo einbindest.

Invalid session
Wer hat denn den Mist verzapft, kann man nur noch online schreiben?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 10. Feb 2003, 01:48
Zitat von Udo:
Das "F": Namenskonventionen.
Ja, hab ich mir gedacht, aber ich vermisse hier die Deklaration, daran hängts. Wo kommt die her ?

Zitat von Udo:
Wer hat denn den Mist verzapft, kann man nur noch online schreiben?
Anscheinend wird alles umgebaut.
@Daniel: *neverchangearunningsystem*

<--- *ratz*
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#8
  Alt 10. Feb 2003, 09:42
Zitat:
aber ich vermisse hier die Deklaration, daran hängts. Wo kommt die her ?
Welche denn?
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#9
  Alt 10. Feb 2003, 10:14
Hallo Udo,

ich habe Deine Variante probiert und kriege beim Start der Anwendung, die das DBEditLabel verwendet folgende Fehlermeldung:

"Klasse: TLabel nicht gefunden"

Vermutlich liegt in der Zeile
Delphi-Quellcode:
  private
    FLabel: TLabel;
der Fehler, oder hast Du diese Art der Variablen-Definition schon mal irgendwo erfolgreich, sprich funktionsfähig, verwendet?

mfg
eddy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10
  Alt 10. Feb 2003, 12:31
Hi,

mit soviel Resonanz habe ich gar nicht so schnell gerechnet. 8) Udos Programm bildet eine gute Grundlage. Ich habe jetzt versucht, das Label links anzuordnen und zwar mit diesen Änderungen bei TDBeditLabel:

Code:
published

property DBEditCaption: WideString read FCaption write SetCaption;
    property DBEditCaptionPos: TLabelPosition read FCaptionPos write SetCaptionPos;
Code:
procedure TDBEditLabel.SetCaptionPos(Value: TLabelPosition);
begin
  if Value <> FCaptionPos then
  begin
    FCaptionPos := Value;
//    FLabel.CaptionPos := Value;
  end;
end;
Dann zeigt er mir im OI auch schön an: lpAbove, lpLeft usw. Aber eine Änderung bewirkt nichts. Im Prinzip würde es zumindest mir fast schon reichen, wäre das Label standardmäßig links. Das Teil sollte sich halt schon so ähnlich verhalten wie TLabeledEdit bei D6. Danach wollte ich dann noch LabelSpacing entsprechend nachbilden. Da hab ich aber im Moment keinen Plan, wo ich da anfangen soll.

Gruß
Hansa
  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 12:25 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