Autor |
Beitrag |
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Mo 06.04.09 17:33
Als Beispiel eine Sequenz als Anlage. In diesem Fall das erste Bild: Normaldarstellung; zweite Bild: Button gesperrt; dritte Bild: Maustaste gedrückt, Maustaste losgelassen wieder erstes Bild. Alles mit PaintShop Pro 7.0 ist aber eigentlich egal, jedes Malprogramm kann das prinzipiell. Das große Bild dann in eine RES-Datei packen:
"Einstellungen BITMAP Deine_Pfadangabe\Einstellungen1.bmp" und laden mit: Form3.BitBtn2.Glyph.LoadFromResourceName(hinstance,'Einstellungen');
Über die Einstellungen im O.Inspec. steht ja oben schon was.
Das sollte imho reichen zum Verständnis.
Einloggen, um Attachments anzusehen!
_________________ Salus populi suprema lex esto
|
|
Garf
      
Beiträge: 54
Erhaltene Danke: 2
D3Prof, D7PE, TDE
|
Verfasst: Mo 06.04.09 20:35
Massiv hat folgendes geschrieben : | Also ich weiss nur noch nicht, wie ich die bilder bearbeiten sollte damit sie so aussehen das sie geklickt wurden! |
Am besten andere Programme ansehen und Anregungen holen. Und für die Komponente am besten einen Button nehmen, welcher von TGraphicControl abgeleitet wurde, und anpassen.
Grundsätzlich hast Du vier Zustände: Normal, Maus darüber (Hot), Maus gedrückt (Pressed) und deaktiviert (Disabled). Für jeden Zustand wird beim Create ein Bitmap angelegt:
Delphi-Quelltext 1: 2: 3: 4:
| FNormal : TBitmap; FHot : TBitmap; FPressed : TBitmap; FDisabled : TBitmap; |
Für den Zustand des Buttons nimmt man
Delphi-Quelltext 1: 2: 3: 4: 5:
| type TBtnState = (bsNormal, bsHot, bsPressed, bsDisabled);
var FState : TBtnState; |
Dann werden diese Proceduren benötigt, um den Zustand zu verändern und den Button zu zeichnen
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure Paint; override; |
Dann müssten die Proceduren in etwa so aussehen
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure TxyzButton.CMMouseLeave(var Message: TMessage); begin inherited;
if FState <> bsNormal) and (FState <> bsDisabled) then begin FState := bsNormal; Invalidate; end;
Repaint; end;
procedure TxyzButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseDown(Button, Shift, X, Y);
if (Button = mbLeft) then begin FState := bsPressed; Invalidate; end;
Repaint; end;
procedure TxyzButton.MouseMove(Shift: TShiftState; X, Y: Integer); var NewState: TButtonState; begin inherited MouseMove(Shift, X, Y);
if FState <> bsPressed then begin FState := bsHot; Invalidate; end;
Repaint; end;
procedure TxyzButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited MouseUp(Button, Shift, X, Y);
if FState = bsPressed begin FState := bsHot; Invalidate; end;
Repaint; end; |
Der Rest wie Create mit dem Erstellen der Bitmaps und Grundeinstellungen und Destroy zum Freigeben sollte klar sein. In der Procedure Paint wird entsprechend FState das entsprechende Bitmap gezeichnet, zum Beispiel
Delphi-Quelltext 1:
| Canvas.Draw(0, 0, FNormal); |
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Mo 06.04.09 21:13
Oder einfach die Helligkeit verändern, dann reicht ein Bild.
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: Mi 08.04.09 11:30
Danke leute habs mit klick effekt hinbekommne^^
nochmals danke an alle^^
|
|
Massiv 
      
Beiträge: 93
|
Verfasst: Sa 11.04.09 18:16
delphi10, ich hab mal ne frage an dich^^:
bei deinem programm ist es so, dass wenn man mit dem mous an nem button drüber fährt kommt so ne grüne durchsichtige farbe auf dem button. wie hast du das gemacht?
hast du das mit nem Spezielen button gemacht, der so eine Eigenschaft ha?
oder ist das nur ein bild, daass du mit einem Bildbearbeitungsprogramm bearbeitet hast?
wenn das ein spezieler button ist, kannst du mir sagne wie der button heisst und wo ich ihn eventuell laden kann?
|
|
Nils:D
      
Beiträge: 131
Debian, Win XP
Delphi 7 Arch.
|
Verfasst: Sa 11.04.09 20:03
Seid Ihr Euch sicher, dass diese Lösung wirklich gut ist ? Irgendwann wird eh die Frage kommen "Wie mache ich das gleiche wie beim Button bei der Scrollbar". Und gerade der Button ist die einfachste Komponente überhaupt, das kann man auch über eigene Klassen und Canvas lösen. Genau das habe ich vor ein paar Wochen selbst programmiert. Aber das nur so nebenbei gesagt, wenn das Problem so gelöst ist, ist es gelöst. Aber falls die Frage zur Scrollbar/Listbox/... noch kommt, dann sollte man doch nochmal schauen ob das sinnvoll ist, auf Basis bestehender Komponenten zu arbeiten oder nicht doch lieber eigene zu programmieren. Das ist aber ehrlich gesagt auch eine meiner Macken, weil ich eben auf Plattformunabhängigkeit Wert lege und daher nur ungerne in die Tiefen der VCL eingreife.
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Sa 11.04.09 22:25
Massiv hat folgendes geschrieben : | delphi10, ich hab mal ne frage an dich^^:
bei deinem programm ist es so, dass wenn man mit dem mous an nem button drüber fährt kommt so ne grüne durchsichtige farbe auf dem button. wie hast du das gemacht?
hast du das mit nem Spezielen button gemacht, der so eine Eigenschaft ha?
oder ist das nur ein bild, daass du mit einem Bildbearbeitungsprogramm bearbeitet hast?
wenn das ein spezieler button ist, kannst du mir sagne wie der button heisst und wo ich ihn eventuell laden kann? |
Dieser Effekt ist keine Eigenschaft eines Buttons. Es ist ein Shape im Hintergrund des BitBtn, das entsprechend der Ereignisse eingefärbt wird. Ein Beispiel für einen BitBtn:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Procedure TFormX.BitBtnYMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin FormX.Shape1.brush.Color := clLime; FormX.Shape1.brush.Style := bsSolid; end;
Procedure TFormX.BitBtnYMouseLeave(Sender: TObject); begin FormX.Shape1.brush.Color := clSkyBlue; FormX.Shape1.brush.Style := bsDiagCross; end; |
Diese Proceduren im Object-Inspector in das entsprechende Ereignis des BitBtn eintragen. Ist der BitBtn enabled, werden sie aufgerufen, ist der BitBtn deaktiviert, passiert gar nichts. Irgendwo im Programmstart wird das Shape initialisiert mit dem Style und Color von MouseLeave. Mehr steckt nicht dahinter, ist einfach nur ein Blickfang.
Gruß Delphi10
_________________ Salus populi suprema lex esto
|
|
|