Uden at være super Delphi-haj, så kan jeg se, du manglede ; et par steder, nemlig der hvor du ændrer farven på Button1's tekst. Så koden kommer til at se sådan ud:
procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Font.Color = clBlack then
Det er fint så langt men hvis den er Clblack laves den om til ClRed, og tjekker så om den er ClRed, hvilket den jo så er... hvordan bruges "else" her ???
procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Font.Color = clBlack then Button1.Font.Color := clRed else if Button1.Font.Color = clRed then Button1.Font.Color := clBlack; end;
når du har ændret den til rød skal du jo ikke tjeke den igen
dkn>> Jeg kan ikke lidt din løsning. Hvis du vil udvide VCL'en er der ingen grund til at instalere et nyt komponent. Jeg har en løsning hvor det eneste du skal gøre er at use en unit, og så vil det følgende kode virke :
if Button1.Color = clRed then Button1.Color := clBlue else Button1.Color := clred;
Borrisholt>Hvis ikke "skabsdominatoren" (... and it makes me wonder (Led Zep.)) er interesseret, så er jeg. Blev ret overrasket over, at TButton-komponenten havde en Color-property der ikke virkede. Jeg mener, det er da omtrent den mest benyttede komponent i Windows, ikke?
Emailen er hrc_public @ hotmail.com
P.S. Det er lidt ligesom Refresh-metoden i TQuery (burde have læst hjælpeteksten inden jeg dykkede ned i VCL'en...)
constructor TButton.Create(AOwner: TComponent); begin inherited Create(AOwner); FCanvas := TControlCanvas.Create; end;
destructor TButton.Destroy; begin inherited Destroy; FCanvas.Free; end;
procedure TButton.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); with Params do Style := Style or BS_OWNERDRAW; end;
procedure TButton.SetButtonStyle(ADefault: Boolean); begin if ADefault <> IsFocused then begin IsFocused := ADefault; Refresh; end; end;
procedure TButton.CNMeasureItem(var Message: TWMMeasureItem); begin with Message.MeasureItemStruct^ do begin itemWidth := Width; itemHeight := Height; end; end;
procedure TButton.CNDrawItem(var Message: TWMDrawItem); var SaveIndex: Integer; begin with Message.DrawItemStruct^ do begin SaveIndex := SaveDC(hDC); FCanvas.Lock; try FCanvas.Handle := hDC; FCanvas.Font := Font; FCanvas.Brush := Brush; DrawButton(rcItem, itemState); finally FCanvas.Handle := 0; FCanvas.Unlock; RestoreDC(hDC, SaveIndex); end; end; Message.Result := 1; end;
procedure TButton.CMEnabledChanged(var Message: TMessage); begin inherited; Invalidate; end;
procedure TButton.CMFontChanged(var Message: TMessage); begin inherited; Invalidate; end;
procedure TButton.WMLButtonDblClk(var Message: TWMLButtonDblClk); begin Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos)); end;
procedure TButton.DrawButton(Rect: TRect; State: UINT); var Flags, OldMode: Longint; IsDown, IsDefault, IsDisabled: Boolean; OldColor: TColor; OrgRect: TRect; begin OrgRect := Rect; Flags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT; IsDown := State and ODS_SELECTED <> 0; IsDefault := State and ODS_FOCUS <> 0; IsDisabled := State and ODS_DISABLED <> 0;
if IsDown then Flags := Flags or DFCS_PUSHED; if IsDisabled then Flags := Flags or DFCS_INACTIVE;
if IsFocused or IsDefault then begin FCanvas.Pen.Color := clWindowFrame; FCanvas.Pen.Width := 1; FCanvas.Brush.Style := bsClear; FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); InflateRect(Rect, -1, -1); end;
if IsDown then begin FCanvas.Pen.Color := clBtnShadow; FCanvas.Pen.Width := 1; FCanvas.Brush.Color := clBtnFace; FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); InflateRect(Rect, -1, -1); end else DrawFrameControl(FCanvas.Handle, Rect, DFC_BUTTON, Flags);
if IsDown then OffsetRect(Rect, 1, 1);
OldColor := FCanvas.Brush.Color; FCanvas.Brush.Color := Color; FCanvas.FillRect(Rect); FCanvas.Brush.Color := OldColor; OldMode := SetBkMode(FCanvas.Handle, TRANSPARENT); FCanvas.Font.Color := clBtnText; if IsDisabled then DrawState(FCanvas.Handle, FCanvas.Brush.Handle, nil, Integer(Caption), 0, ((Rect.Right - Rect.Left) - FCanvas.TextWidth(Caption)) div 2, ((Rect.Bottom - Rect.Top) - FCanvas.TextHeight(Caption)) div 2, 0, 0, DST_TEXT or DSS_DISABLED) else DrawText(FCanvas.Handle, PChar(Caption), -1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER); SetBkMode(FCanvas.Handle, OldMode);
if Assigned(FOnDrawButton) then FOnDrawButton(Self, Rect, TOwnerDrawState(LongRec(State).Lo));
if IsFocused and IsDefault then begin Rect := OrgRect; InflateRect(Rect, -4, -4); FCanvas.Pen.Color := clWindowFrame; FCanvas.Brush.Color := clBtnFace; DrawFocusRect(FCanvas.Handle, Rect); end; end;
end.
Jens B
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.