Einzelnen Beitrag anzeigen

Benutzerbild von hanselmansel
hanselmansel

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

Button-Komponente erstellen: Oberfläche aus Datei laden

  Alt 20. Jul 2005, 18:39
Hallo,

ich habe mich in die Komponentenentwicklung gestürzt, aber es hapert leider an ziemlich grundlegenden Dingen.

Mein Ziel:
Meine Komponente soll zur Laufzeit ähnliche Eigenschaften besitzen, wie ein TButton. Da die Standard-Buttons aber so schnöde sind, möchte ich zur Entwicklungszeit von der Festplatte drei *.bmp-Dateien laden können. Jeweils ein BMP, das im "Normal-Zustand" des Buttons zu sehen sein soll, eines für "onMouseDown" und eines für den Zustand "enabled = false".

Meine bisherigen Ideen/Versuche:
Da ich im Web keine Komponente finden konnte, die auch nur annähernd meinen Ideen entsprach, habe ich mir überlegt, die Komponente TBmpButton zu erstellen. Dafür habe ich mir dann via Online-Hilfe drei Möglichkeiten überlegt, wie ich mein Ziel am effizientesten erreichen könnte:
  1. Ich möchte ja ein benutzerdefiniertes Steuerelement erstellen. Ins Englische übersetzt dürfte das soviel wie CustomControl heissen. Leider wurde ich von diesem Weg abgeschreckt, denn in der OH steht, dass ich ganz viele abstrakte Eigenschaften des TCustomControl neu schreiben müsste.
  2. Nun könnte ich auch die Komponente von TImage ableiten. Ich verpasse der Funkion drei Variablen vom Typ TImage und lade in diese Variablen die verschiedenen BMP's. In der Funktion OnMouseDown könnte ich dann meiner Komponente jeweils das richtige Image zuweisen.
    Hierbei habe ich vor allem das Problem, dass ich keinen Plan habe, wie ich die Images zur Entwicklungszeit laden lassen soll, und wie genau ich das Ereignis OnMouseDown behandle.
  3. Die dritte Möglichkeit wäre, den Typ TButton zu verändern. Die Idee scheint mir ganz sinnvoll, da die OH meint, es sei sehr einfach die Eigenschaften einer bestehenden Komponente zu "überschreiben".
    In diesem Fall würde ich wie in Fall 2 die BMP's in TImage-Variablen laden (und wüsste immer noch nicht, wie das zur Entwurfszeit geht...) und dann die Paint-Prozedur so umschreiben, dass abgefragt wird, welches Image denn nun gezeichnet werden soll.
Bei meinen bisherigen Versuchen, mich mit dem Komponenten-Experten anzufreunden hat es dann meißt den Blck-Out gegeben, nachdem er mir die halb-leere Unit präsentierte.

Meine (wichtigsten) Fragen:
  1. Welchen Weg sollte ich eurer Meinung nach gehn?
  2. Wie kann ich die BMP's zur Entwurfszeit laden? (Damit 2 verschiedene TBmpButtons auch 6 verschiedene BMP's laden können.)
  3. Ist es möglich, dass das Programm beim MouseDown über der neuen Komponente erstmal das Image ändert, (Und daran zur Entwicklungszeit des Programms auch nicht gerüttelt werden kann) und dann noch eine Ereignisbehandlungsrutine "OnMouseDown" besitzt?

Ich freue mich schon im Voraus über eure Hilfe,
und wünsche noch einen schönen Abend.


hanselmansel
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