Witam.
Jak narysować wykres liniowy?
Ściągnąłem gotowy program wyliczający x i y<url> http://www.speedyshare.com/821169556.html</url>
i chciałbym go przerobić żeby dodatkowo rysował ten wykres w nowym formie.
Powiecie mi czemu nie mogę rozszerzyć tego okienka z programem w projekcie?
Jeszcze jedno pytanko: jak zrobić żeby w buttonie napisy był pionowo( z góry na dół).
Z góry dziękuję za odp
Jeśli chcesz własnoręcznie rysować wykres to poczytaj o Canvas. Jeśli chcesz gotowy komponent to jest bodajże TChart (ale w darmowych wersjach go nie ma).
Słyszałem o Canvas...powie mi ktoś jak do form2 przypisać coś z forma 1??
seba612 napisał(a)
Słyszałem o Canvas...
Więc w czym problem?
Problem w tym, że jak przypisuję w tym formie gdzie ma być narysowany wykres do zmiennej wartości z form 1 to piszę, że taka wartosc jest niezdeklarowana
A po co się w takie pierdołki bawić? Nie lepiej zrobić na jednej formie? Na jakimś Shapie np.
Dostałem w szkole konkretne zadanie, które muszę zrobić i chcę żeby to było tak jak mi zostało polecone.
Czy w module (unicie) dotyczącym formy 1 masz dodany w sekcji uses unit dotyczący formy 2 ?
Bo jesli nie, a probujesz sie do niej odwolac, to nie dziwne, ze masz komunikat o niezadeklarowanym typie.
Tak, jest w sekcji uses
To jak jest w uses to na pewno możesz się do niego odwołać, co do zrobienia buttona z pionowym Caption
to siedziałem i stworzyłęm takie coś jak poniżej. Chyba działa ok. To komponent dziedziczący z TBitBrn, ale
nie umiem zablokować zmiany własności Glyph, dlatego przy niej nie grzeb. Na standardowym Buttonie - nie
dało się rysować odwróconego tekstu, dlatego wykorzystałem Glyph z BitBtn. I przykład użycia komponentu:
var
A : TVerticalCaptionButton;
begin
A := TVerticalCaptionButton.Create(Self);
A.Parent := Self;
A.Left := 20;
A.Top := 20;
A.Height := 300;
A.Width := 100;
A.SetVerticalText(rdFromDownToUp, 'Jakiś tekst napisany pionowo');
end;
Kierunki są dwa rdFromDownToUp oraz rdFromUpToDown. To powyżej to tworzenie komponentu w sposób
dynamiczny (ale to pewnie już wiesz). Możesz jednak też zainstalować komponent. Kod całego modułu tutaj:
unit vertbtn;
interface
uses
Windows, Buttons, Messages, Classes, Controls, Graphics;
const
BorderSpace = 10;
type
TRotateDirection = (rdFromDownToUp, rdFromUpToDown);
type
TVerticalCaptionButton = class(TBitBtn)
private
FBmp : TBitmap;
FText : string;
FRotateDirection : TRotateDirection;
protected
procedure WMPaint(var Message : TMessage); message WM_PAINT;
procedure WMSize(var Message : TWMSize); message WM_SIZE;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure SetVerticalText(const RotateDirection : TRotateDirection; const Text : string);
end;
procedure Register;
implementation
procedure RotTextOut(ACanvas : TCanvas; X, Y, Angle : Integer; Text : string);
var
LF : TLogFont;
TF : TFont;
begin
with ACanvas do
begin
Font.Name := 'Arial';
Font.Size := 10;
TF := TFont.Create;
try
TF.Assign(Font);
GetObject(TF.Handle, SizeOf(lf), @lf);
LF.lfEscapement := Angle * 10;
LF.lfOrientation := 0;
SetBkMode(Handle, TRANSPARENT);
TF.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
finally
TF.Free;
end;
TextOut(X, Y, Text);
end;
end;
constructor TVerticalCaptionButton.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csSetCaption, csOpaque, csDoubleClicks];
Width := 40;
Height := 220;
TabStop := True;
FText := '';
FBmp := TBitmap.Create;
end;
destructor TVerticalCaptionButton.Destroy;
begin
FBmp.Free;
inherited Destroy;
end;
procedure TVerticalCaptionButton.SetVerticalText(const RotateDirection : TRotateDirection; const Text : string);
var
TextHeight, TextWidth, XPosition, YPosition, RotateAngle : integer;
begin
FText := Text;
Caption := '';
FRotateDirection := RotateDirection;
FBmp.Height := Height;
FBmp.Width := Width;
FBmp.Canvas.Brush.Color := clBtnFace;
FBmp.Canvas.FillRect(ClientRect);
TextHeight := FBmp.Canvas.TextHeight(Text);
TextWidth := FBmp.Canvas.TextWidth(Text);
XPosition := 0;
YPosition := 0;
RotateAngle := 0;
case RotateDirection of
rdFromDownToUp :
begin
XPosition := ((Width - TextHeight) div 2) - BorderSpace;
YPosition := (Height - BorderSpace) div 2 + (TextWidth div 2);
RotateAngle := 90;
end;
rdFromUpToDown :
begin
XPosition := Width - (Width div 2);
YPosition := (Height - BorderSpace) div 2 - (TextWidth div 2);
RotateAngle := 270;
end;
end;
RotTextOut(FBmp.Canvas, XPosition, YPosition, RotateAngle, Text);
Glyph.Height := Height - BorderSpace;
Glyph.Width := Width - BorderSpace;
Glyph.Canvas.Draw(0, 0, FBmp);
SendMessage(Handle, WM_PAINT, 0, 0);
end;
procedure TVerticalCaptionButton.WMPaint(var Message : TMessage);
begin
if Assigned(FBmp) then
Glyph.Canvas.Draw(0, 0, FBmp);
inherited;
end;
procedure TVerticalCaptionButton.WMSize(var Message : TWMSize);
begin
inherited;
SetVerticalText(FRotateDirection, FText);
end;
procedure Register;
begin
RegisterComponents('Samples', [TVerticalCaptionButton]);
end;
end.
cholerka taka pierdoła, a tyle kodu...myślałem, że to jest gdzieś w object inspector. Wielkie dzięki za zaangażowanie