Announcement

Collapse
No announcement yet.

Änderung eines Bitmap im OI und in Komponente speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Änderung eines Bitmap im OI und in Komponente speichern

    Hallo Leute,

    ich habe eine eigene Komponente (Panel mit SpeedButton) zusammengebaut. Jetzt möche ich im Objektinspector (wie es im SpeedButton möglich ist) die Glyph des eingebauten Button zur Entwicklungszeit ändern. Ich habe es bisher so realisiert das ich eine Recourcen-Datei mit LoadFromResourceName eingelesen habe. Dann kann ich das Bitmap aber nur ändern in dem ich die Resourcen-Datei neu erstelle und die Komponente neu Kopiliere. Bei SpeedButton kann ich das aber direkt im OI ändern. Ich kann aber nicht finden wie und wo die geänderten Daten abgelegt werden bzw. mit welchen Methoden ich die Daten speichern kann.

    In vorraus schonmal Danke

    Grüße

    Andreas

  • #2
    Hi Andreas,

    erzeuge doch in deiner Komponente Properties für die Button - Glyphs. In den read und write Methoden kannst Du dann das Property "Glyph" des Buttons weiterreichen.

    z.B.

    <pre>
    private
    function getButton1Glyph: TBitmap;
    procecure setButton1Glyph(Value: TBitmap);

    published
    property Button1Glyph: TBitmap read getButton1Glyph write setButton1Glyph;

    ...

    function TMyComponent.getButton1Glyph: TBitmap;
    begin
    Result := Self.Button1.Glyph;
    end;

    procecure TMyComponent.setButton1Glyph(Value: TBitmap);
    begin
    Self.Button1.Glyph := Value;
    end;
    </pre>

    Dadurch kannst Du mit dem Standardeditor im OI das Glyph bearbeiten.

    Gruß
    Richar

    Comment


    • #3
      Hallo Richard,

      danke für die Antwort.
      Das mit den Properties habe ich ausprobiert und es klappt auch. Mein Problem ist aber das ich dem Button, je nach status der Komponente, 2 verschiedene Glyph's zuweisen möchte. Die sollen im OI einstellbar sein. Wie Oben beschrieben habe ich das bisher mit einer RES-Datei gemacht. Ist aber leider nicht so flexibel.
      Aus den Quellen von SpeedButton werde ich aber nicht schlau wie das zur Entwicklungszeit gespeichert werden kann.

      Grüße

      Andrea

      Comment


      • #4
        Hi Andreas,
        verwalte doch in deiner Komponente zwei Bitmaps und gib diese als Property aus. Dann weist Du je nach Status das entsprechende Bitmap dem Button zu.

        <pre>
        private
        fBitmap1: TBitmap;
        fBitmap2: TBitmap;
        published
        property Bitmap1: TBitmap read fBitmap1 write fBitmap1;
        property Bitmap2: TBitmap read fBitmap2 write fBitmap2;
        </pre>

        An der Stelle, wo Du das Bitmap dann dem Button zuweisen sollst (d.h. da, wo du es aus der Res-Datei einliest).

        <pre>
        if status = 1 then
        Button.Glyph := fBitmap1
        else
        Button.Glyph := fBitmap2
        </pre>

        Ach ja, am besten liest Du die Grafiken während der Erzeugung der Componente (im Kontruktor) aus der Resourcendatei, damit die Bitmaps auch mit Inhalt gefüllt sind.

        Gruß
        Richar

        Comment


        • #5
          Hallo Richard,

          die erste Version mit dem direkten zuweisen des Bitmap zum Button.Glyph funktioniert.
          Bei der Zweiten Version mit dem Zwischenspeichern in 2 Bitmap's bekomme ich, nachdem ich die Komponente auf das Formular gelegt und dann das erste Bitmap zugewiesen habe, eine Schutzverletzung.
          Ich kann auch die Komponente nicht mehr löschen. Muss das Project ohne Speichern schließen.
          Kannst Du mir nochmal eine Tip geben wie ich im Konstructor die Daten aus der Resourcen-Datei holen kann. Ich habe keine Ahnung wie die res-Datei heißt und wie ich an die Daten komme.

          Nochmal Danke

          Grüße

          Andrea

          Comment


          • #6
            Hi Andreas,

            im Konstruktor:
            <pre>
            Self.fBitmap1 := TBitmap.Create;
            Self.fBitmap2 := TBitmap.Create;
            Self.fBitmap1.LoadFromResourceName( ... );
            Self.fBitmap2.LoadFromResourceName( ... );
            </pre>

            im Destructor
            <pre>
            Self.fBitmap1.Free; Self.fBitmap1 := NIL;
            Self.fBitmap2.Free; Self.fBitmap2 := NIL;
            </pre&gt

            Comment


            • #7
              Hi Andreas,
              Nur ne kurze Info... Die Daten des Bitmaps werden in der DFM-Datei des Formulars abgelegt, wenn du eines zur DesignZeit hinzufügst.

              Gruß Stefan Lau

              Comment


              • #8
                Hallo Leute,

                danke für die schnellen Antworten.

                Ich bin noch ein Delphi-Anfänger und mir war nicht klar das die IDE so schlau ist ;-)) und sich um das Abspeichern der Properties selbst kümmert.
                Beim Zuweisen der Bitmaps im OI war jetzt noch das Problem das es dannach eine Schutzverletzung gegeben hat. Das Problem war erst behoben als ich die Bitmaps nicht direkt über das Propertie den Variablen Zugewiesen habe, sondern mit einer Set-Methode und Assign weitergereicht habe.

                private
                FBitmap: Bitmap

                published
                property FBitmap: TBitmap read FBitmap write SetBitmap1

                procedure SetBitmap1(Value: Bitmap);
                begin
                FBitmap1.Assign(Value)
                end;

                Grüsse

                Andrea

                Comment


                • #9
                  Wie und wo muss denn die RES eingebunden werden?

                  Originally posted by Richard Woitaschik View Post
                  Hi Andreas,

                  im Konstruktor:
                  <pre>
                  Self.fBitmap1 := TBitmap.Create;
                  Self.fBitmap2 := TBitmap.Create;
                  Self.fBitmap1.LoadFromResourceName( ... );
                  Self.fBitmap2.LoadFromResourceName( ... );
                  </pre>

                  im Destructor
                  <pre>
                  Self.fBitmap1.Free; Self.fBitmap1 := NIL;
                  Self.fBitmap2.Free; Self.fBitmap2 := NIL;
                  </pre&gt
                  Hallo zusammen, habe ein ähnliches Projekt wo ich eine tgroupbox mit einem button versehe (neue Komponente).

                  Ich erzeuge im Contruktor auch meine Buttons, kann aber irgendwie die Resource nicht finden, obwohl diese direkt nach "Implementation" eingebunden wird. Muss ich da etwas beachten? Komme irgendwie nicht voran.

                  Danke für nen Tip

                  Comment

                  Working...
                  X