![]() |
Bild in eine Buttonkomponente??
Liste der Anhänge anzeigen (Anzahl: 1)
hi
bin gerade dabei eine Buttonkomponente zu erstellen, ich will allerdings (falls dies möglich ist) ein Bild statt zb. im Anhang einen Kreis als Button verwenden. mit loadfromFile und LoadBitmap funktioniert es nicht, muss ich da einen eigenen Dateityp verwenden oder funktionieren solche Sachen grundsätzlich nicht? hier ist einmal ein Auszug aus dem Kreisbutton
Delphi-Quellcode:
procedure TOButton.Paint;
var i: Integer; begin // Position für Anzeige von Caption x := (Width - Canvas.TextWidth(Caption)) div 2; y := (Height- Canvas.TextHeight(Caption)) div 2; // OButton gedrückt if Pressed then for i := 1 to 3 do begin // Canvas.Pen.Color := OColor[4-i]; Canvas.Pen.Color := OColor[(i+1) div 2]; //statt den paar zeilen ein Bild einfügen Canvas.Arc (i, i, Width-i, Height-i, i, i, i, i); Canvas.Ellipse (3, 3, Width-3, Height-3); Canvas.TextOut (x+1,y+1, Caption+' '); end // OButton nicht gedrückt else for i := 1 to 3 do begin Canvas.Pen.Color := OColor[i]; Canvas.Arc (i, i, Width-i, Height-i, i, i, i, i);//hier genau so Canvas.Ellipse (3, 3, Width-3, Height-3); Canvas.TextOut (x,y, Caption+' '); end; end; |
Re: Bild in eine Buttonkomponente??
Und der TBitButton reicht dir nicht?
|
Re: Bild in eine Buttonkomponente??
naja, ich will eher eine eigene Buttonform (das Bild) und nicht ein Bild im Button
|
Re: Bild in eine Buttonkomponente??
kann mir wirklich keier helfen?
|
Re: Bild in eine Buttonkomponente??
Ich würd auch sagen der TBitButton sonst kenn ich nichts. :|
|
Re: Bild in eine Buttonkomponente??
das heißt sonst muss man den Button mit Canvas zeichnen, oder wie sonst?
sieht bei den AlphaSkinButtons ziemlich schwierig aus es nur mit Canvas zu machen? |
Re: Bild in eine Buttonkomponente??
ne andere version ist die Image-Komponente, die auch angeklickt werden kann. Wenn man das Image auf Transpartent schaltet kanns auch wie ein Button aussehen. Nur der Klick wird auch dann gehaldelt, wenn er nicht auf dem Bild ist...
rollstuhlfahrer |
Re: Bild in eine Buttonkomponente??
das möchte ich ja vermeiden
hat sonst keiner eine Idee?? |
Re: Bild in eine Buttonkomponente??
Du könntest das Image laden, abscannen und Dir eine region zusammenbasteln, aber das ist alles Andere als trivial.
|
Re: Bild in eine Buttonkomponente??
Vor kurzem erst hat doch jemand einen runden Button geschrieben.
![]() |
Re: Bild in eine Buttonkomponente??
Zitat:
wie hast du es eigentlich mit deinem Button gemacht (ich würde es wenn es geht nur ohne GDI+ machen) unter uns: ich finde die GDi+.dll nicht !!, weder auf msdn noch bei deinem Source :( @HalloDu einen "Runden Button" habe ich ja auch schon geschrieben --> .pas am Anfang |
Re: Bild in eine Buttonkomponente??
Zur DLL: schau mal
![]() |
Re: Bild in eine Buttonkomponente??
unter deinem Link steht, dass die Seite weggezogen ist und dann werde ich zu "Windows® Server 2003 SP1 Platform SDK Web Install" verlinkt (mit IE 7).
und kannst du mir vielleicht bei meinem Problem weiterhelfen: bis Image laden komme ich mit, abscannen auch noch aber danach stehe ich auf der Leitung??? |
Re: Bild in eine Buttonkomponente??
Du müsstest die Form erkennen und dementsprechend eine Region bilden, aber da schreib ich jetzt keinen Source dazu, das ist mir viel zu aufwändig.
|
Re: Bild in eine Buttonkomponente??
na gut danke.
kann mir vielleicht jemand einen Link oder ein Tutorial zu dem von DeddyH angesprochenes Thema geben? |
Re: Bild in eine Buttonkomponente??
Delphi-Quellcode:
Liefert dir eine Region zu dem übergebenen Bild, wobei die Region alle Teile ausschliesst, welche die Transparenzfarbe des Bitmaps haben.
function CreateBitmapRegion(const ABitmap: TBitmap): HRGN;
var lTransparentColor: TRGBTriple; lX, lY, lStartX: Integer; lPixel: PRGBQuad; lExcluded: HRGN; begin if assigned(ABitmap) then begin result := CreateRectRGN(0, 0, ABitmap.Width, ABitmap.Height); ABitmap.PixelFormat := pf32bit; lTransparentColor.rgbtRed := GetRValue(ColorToRGB(ABitmap.TransparentColor)); lTransparentColor.rgbtGreen := GetGValue(ColorToRGB(ABitmap.TransparentColor)); lTransparentColor.rgbtBlue := GetBValue(ColorToRGB(ABitmap.TransparentColor)); for lY := 0 to pred(ABitmap.Height) do begin lPixel := ABitmap.Scanline[lY]; lStartX := -1; for lX := 0 to pred(ABitmap.Width) do begin if (lPixel^.rgbRed = lTransparentColor.rgbtRed) and (lPixel^.rgbGreen = lTransparentColor.rgbtGreen) and (lPixel^.rgbBlue = lTransparentColor.rgbtBlue) then begin if lStartX = -1 then lStartX := lX; end else begin if lStartX > -1 then begin lExcluded := CreateRectRGN(lStartX, lY, lX, succ(lY)); try CombineRGN(result, result, lExcluded, RGN_DIFF); lStartX := -1; finally DeleteObject(lExcluded); end; end; end; Inc(lPixel); end; if lStartX > -1 then begin lExcluded := CreateRectRGN(lStartX, lY, ABitmap.Width, succ(lY)); try CombineRGN(result, result, lExcluded, RGN_DIFF); finally DeleteObject(lExcluded); end; end; end; end else result := 0; end; Ansonsten: ![]() |
Re: Bild in eine Buttonkomponente??
Zitat:
wenn du ein Bitmap benutzt, dann kannst du beim Klicken die Farbe des Pixels unter dem Kursor vom Bild abfragen. Nur wenn die Farbe ungleich von TransparentColor des Bildes ist, dann wird das onMouseDown Ereignis ausgelöst sonst nicht. Alternativ könnte man auch die Maske des Bildes abfragen. |
Re: Bild in eine Buttonkomponente??
@Muetze1
Danke, was muss ich an dem Source ändern, damit ich das gewünschte Bild bekomme (ich will jetzt nicht zu viel verlangen, ich habe aber überhaupt keine Ahnung was der Source bedeutet :( ) @bitsetter stimmt so könnte man es machen, aber es ist leider kein Button :pale: |
Re: Bild in eine Buttonkomponente??
Liste der Anhänge anzeigen (Anzahl: 1)
Kleines Beispiel im Anhang. Damit solltest du dann deinen Button anpassen können.
|
Re: Bild in eine Buttonkomponente??
danke, und hoffentlich ein Bild einfügen können
setzte mich dann morgen damit auseinander :thanks: |
Re: Bild in eine Buttonkomponente??
Das bedeutet du weisst nur nicht wie man eine Eigenschaft definiert die ein Bild aufnimmt um es dann auch zum Zeichnen zu nutzen?
Delphi-Quellcode:
So, das ist alles. Ohne Gewähr, da hier im Forum getippt.
type
TButttonKompo = class(TCustomControl) private fBild: TBitmap; procedure SetBild(AValue: TBitmap); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; published property Bild: TBitmap read fBild write SetBild; end; ... constructor TButtonKompo.Create(AOwner: TComponent) begin inherited; fBild := TBitmap.Create; end; destructor TButtonKompo.Destroy; begin fBild.Free; inherited; end; procedure TButtonKompo.SetBild(AValue: TBitmap); begin fBild.Assign(AValue); Invalidate; end; procedure TButtonKompo.Paint; begin if not fBild.Empty then self.Canvas.Draw(0, 0, fBild); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz