Einzelnen Beitrag anzeigen

Benutzerbild von hanselmansel
hanselmansel

Registriert seit: 23. Feb 2005
Ort: Kaiserslautern
279 Beiträge
 
Delphi 2009 Enterprise
 
#5

Re: Button-Komponente erstellen: Oberfläche aus Datei laden

  Alt 21. Jul 2005, 16:24
So, ich habe mich mal an die Programmierung der Komponente gegeben, und auch (wie ich finde) schon einige kleine Erfolge erzielen können.
Delphi-Quellcode:
unit MyButtons;

interface

uses
  SysUtils, Classes, Controls, Graphics;

type
  Wechselbutton = class(TCustomControl)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
    Procedure Paint; override;
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    Procedure LoadImg_normal(Pfad: String);
    Procedure LoadImg_MouseDown(Pfad: String);
    Procedure LoadImg_disabled(Pfad: String);
  end;

procedure Register;

var
  Img_normal :TBitmap;
  Img_MouseDown :TBitmap;
  Img_disabled :TBitmap;
  b_Enabled :Boolean;
  b_MouseDown :Boolean;


implementation

procedure Wechselbutton.Paint;
begin
If b_Enabled then
  Begin
  If b_MouseDown then
    Begin
    {Width := Img_MouseDown.Width;
    Height := Img_MouseDown.Height; }

    Canvas.Draw(0,0,Img_MouseDown);
    End
  Else
    Begin
    {Width := Img_normal.Width;
    Height := Img_normal.Height;}

    Canvas.Draw(0,0,Img_normal);
    End;
  End
Else
  Begin
  {Width := Img_disabled.Width;
  Height := Img_disabled.Height;}

  Canvas.Draw(0,0,Img_disabled);
  End;
end;

procedure Wechselbutton.LoadImg_normal(Pfad :String);
begin
Img_normal := TBitmap.Create;
  try
    Img_normal.LoadFromFile(Pfad);
  except
    Img_normal.Free;
  end;
end;

Procedure Wechselbutton.LoadImg_MouseDown(Pfad: String);
begin
Img_MouseDown := TBitmap.Create;
  try
    Img_MouseDown.LoadFromFile(Pfad);
  except
    Img_MouseDown.Free;
  end;
end;

Procedure Wechselbutton.LoadImg_disabled(Pfad: String);
begin
Img_disabled := TBitmap.Create;
  try
    Img_disabled.LoadFromFile(Pfad);
  except
    Img_disabled.Free;
  end;
end;


//*****************
//*****************
//*****************

procedure Register;
begin
  RegisterComponents('Beispiele', [MyButtons.Wechselbutton]);
end;

end.
Ich bin nun allerdings an einige Probleme gestoßen, zu denen ich von euch mal den einen oder anderen Wink mit dem Zaunpfahl gebrauchen könnte:
  1. Wenn ich den Kommentar von den auskommentierten Stellen wegnehme, bekomme ich eine Fehlermeldung. (Screenshot im Anhang!) Meiner Meinung nach, liegt es auch an genau dieser Stelle im Code, denn durch Auskommentieren läuft die Komponente fehlerfrei.
  2. Ich würde den bool'schen Werten b_Enabled und b_MouseDown gerne Default-Werte zuweisen, damit der Button standardmäßig "aktiviert und ungedrückt" angezeigt wird. Wo kann ich das machen?
  3. In der OH habe ich gelesen, dass man bestimmten Propertys Eigenschaftseditoren zuweisen kann, in denen man dann zur Entwurfszeit Werte angeben kann.
    In diesem Sinne würde ich gerne die Load_Img-Prozeduren in den Objektinspektor (oder ähnliches) bekommen, um damit zur Entwurfszeit die Bilder laden zu können.

Ich denke, das war es erstmal...
Miniaturansicht angehängter Grafiken
zugriffsverletzung_536.jpg  
Es gibt nur sehr wenige Probleme auf dieser Welt, die sich nicht mit einigen hundert Gramm Sprengstoff lösen ließen.
  Mit Zitat antworten Zitat