Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   chart mit button-Funktion (https://www.delphipraxis.net/184365-chart-mit-button-funktion.html)

Hartfrid Krause 20. Mär 2015 06:53

chart mit button-Funktion
 
Ich möchte diese chart quasi als button benutzen: wenn ich auf eine Zeile mit der Maus tippe, soll eine entsprechende Anweisung möglich sein.
Wie kann ich das machen?

for i:=1 to 11 do chart2.series[0].AddXY(4,i,partei[12-i],farbe[12-i]) ;

Daniel 20. Mär 2015 06:57

AW: chart mit button-Funktion
 
Moin,

wenn Du mit "Zeile" den Balken der Serie meinst, dann schaue Dir das OnClick-Ereignis der Serie an. Alternativ hat das Chart selbst auch noch ein OnClick-Ereignis, damit könntest Du Klicks auf den Hintergrund abfangen.

Hartfrid Krause 20. Mär 2015 10:47

AW: chart mit button-Funktion
 
Ich krieg das noch nicht gebacken:
ich habe 11 Horizontalbalken (mit 11 unterschiedlichen Farben).
Wenn ich einen Balken anklicke, dann soll etwas passieren (z.B. Anzeige der wievielte Balken.
mit dem onclick komme ich nicht zurecht

if chart2.SeriesList[0].OnClick(sender,i,button1,shift,x,y)=true then showmessage('i');

gibt stets eine Falschmeldung.
Ein weiterer Hinweis wäre hilfreich.
Grüße aus Darmstadt an Hamburg
hartfrid krause

himitsu 20. Mär 2015 10:59

AW: chart mit button-Funktion
 
Zitat:

gibt stets eine Falschmeldung
Was soll das sein?

Außerdem: Du solltest ein OnClick-Event implementieren und es nicht selber aufrufen.
Ich bin mir auch sicher, daß OnClick kein Boolean als Result zurück gibt.
Und man sollte niemals mit =true vergleichen.

Daniel 20. Mär 2015 11:05

AW: chart mit button-Funktion
 
Hallo

Zitat:

Zitat von Hartfrid Krause (Beitrag 1294208)
if chart2.SeriesList[0].OnClick(sender,i,button1,shift,x,y)=true then showmessage('i');

Du zäumst das Pferd von der falschen Seite auf. In Deinem Beispiel versuchst Du, OnClick selbst aufzurufen - tatsächlich möchtest Du aber warten, bis der Anwender dies tut. Schaue Dir mal im Objekt-Inspektor Deine Balken-Serie an. Dort findest Du das Ereignis "OnClick", welches quasi "von selbst" (nicht ganz, aber für den Moment mag das passen) ausgelöst wird, wenn der Anwender auf einen beliebigen Balken dieser Serie klickt.

Delphi-Quellcode:
procedure TForm30.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage( IntToStr(ValueIndex) );
end;
Innerhalb dieses Events bekommst Du über den Parameter "ValueIndex" die laufende Nummer des Balkens frei Haus geliefert.

Wenn Dir das mit den Events noch ein wenig suspekt ist, dann empfehle ich einen Blick in den Delphi-Crashkurs.

Hartfrid Krause 22. Mär 2015 14:03

AW: chart mit button-Funktion
 
Es klappt noch nicht.
Ich rufe auf:

Delphi-Quellcode:
USES
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Grids, Vcl.StdCtrls,
  VclTee.TeeGDIPlus, VCLTee.TeEngine, VCLTee.Series, VCLTee.TeeProcs,
  VCLTee.Chart,w02_definitionen, Vcl.Buttons, VCLTee.TeeTools;


type:chart2:tchart;
und als procedure

procedure tform31.Parteinamenchartfuellen(sender:TObject);
var i:integer;
begin
   Chart2.AddSeries(THorizBarSeries.Create(Self));
   Chart2.Legend.Visible := false;
   Chart2.View3D := false;
   Chart2.Title.Visible := false;
   (Chart2.Series[0] as THorizBarSeries).MarksOnBar:=True;
   (Chart2.Series[0] as THorizBarSeries).ColorEachPoint:=True;
   (Chart2.Series[0] as THorizBarSeries).BarWidthPercent := 60;
   (Chart2.Series[0] as THorizBarSeries).Marks.Transparent:=false;
   (Chart2.Series[0] as THorizBarSeries).SideMargins := false;
   (Chart2.Series[0] as THorizBarSeries).MarksLocation:= mlCenter;
   for i:=1 to 11 do chart2.series[0].AddXY(4,i,partei[12-i],farbe[12-i]);
end;
Farben, Felder und werte stiimen.

Ich stehe ein wenig weiter auf dem Schlauich, da ic h ja keine serie1 aufrufe. Wenn ich chart2 lösche und eine neue mit horizbatseries definiere, klappt es auch nicht???
grüße an Hamburg
hartfrid

Daniel 23. Mär 2015 07:51

AW: chart mit button-Funktion
 
Hallo Hartfrid,

Du bist ganz kurz vor dem Ziel. :-)

Lege die eine Prozedur an, die aufgerufen werden soll, wenn der Anwender auf Deine Serie klickt. Ich nehme mein Mini-Beispiel:
Delphi-Quellcode:
procedure TForm30.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage( IntToStr(ValueIndex) );
end;
und dann musst Du diese nur noch Deiner Serie zuweisen:

Delphi-Quellcode:
(Chart2.Series[0] as THorizBarSeries).OnClick:= Series1Click;
das OnClick-Event sollte schon in das Basis-Klasse vorhanden sein, so dass (vermutlich) auch

Delphi-Quellcode:
Chart2.Series[0].OnClick:= Series1Click;
funktionieren wird.

Hartfrid Krause 23. Mär 2015 08:36

AW: chart mit button-Funktion
 
Danke - so klappt es
gruß aus darmstadt
hartfrid


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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