![]() |
Exontrol G2Antt wie Item und Bars durchlaufen
Hallo Zusammen,
ich habe mittlerweile die Komponente eingesetzt und kann Items und zu jedem Item Bars hinzufügen. Was ich noch nicht herausgefunden habe ist, wie kann ich alle Items durchlaufen und ein Item als Object abrufen so dass ich dessen Properties anpassen kann. Das gleiche auch mit den Bars. Das Problem ist, ich erzeuge ein Item in etwa so:
Code:
h ist dabei nicht wie erwartet ein Object vom Typ Item sondern ein integer. Also eine Referent auf das item.
h := G2antt1.Items.AddItem('<b>'+qrGewerke.FieldByName('A_BEZEICHNUNG').AsString+'</b>');
Somit kann ich h.caption := 'Ein Text' nicht übergeben. Gruß Kostas |
AW: Exontrol G2Antt wie Item und Bars durchlaufen
Was ist das? :gruebel: (Ich verstehe gerade nur Bahnhofskantine)
Wird da nicht der ItemIndex zurückgegeben? Edit: Da wird ein Handle auf das Item zurückgegeben ... |
AW: Exontrol G2Antt wie Item und Bars durchlaufen
Zitat:
Leider ist auch das nicht durchgängig. Bei den Bars wird nichts zurückgegeben. G2antt1.Items.AddBar gibt z.B. nichts zurück. Dafür kann man die sehr Leistungsfähige Methode nutzen um Objekteigenschaften und sonst was abzufragen.
Code:
Parameter1 ist das Handle des Items mit dessen Bars.
G2antt1.Items.ItemBar[item,'<*>',EXG2ANTTLib_TLB.exBarsCount];
Parameter2 ist eine Suchmaske für Bars. Parameter3 sind Konstanten nachdem man suchen möchte. Das Teil ist absolut mächtig und hat endlose Funktionalität. Ich bin noch nicht dahintergestiegen warum ich nicht ein Object vom Typ Item und ein Object vom Typ Bar bekommen kann. Gruß Kostas |
AW: Exontrol G2Antt wie Item und Bars durchlaufen
Evtl. weil du da ein COM Objekt ansprichst?
Hast du dir die HowTo für Delphi angesehen? ![]() Es ist ein wenig Verrenkung nötig (im Vergleich zu einem nativen Delphi-Control). Besser wäre es allerdings, du würdest dir ein eigenes Interface schreiben und darüber auf das COM Objekt zugreifen. Dann wird die Verwendung einfacher und auch ein evtl. Wechsel des Gantt-Objekts ist fast problemlos möglich. |
AW: Exontrol G2Antt wie Item und Bars durchlaufen
Zitat:
Sehr viel habe ich ja bereits herausgefunden. Ich brauche nur noch die zwei Sachen: wie kann ich durch die Liste der Items durchlaufen und dabei das aktive Item bekommen. Und wie kann ich durch die Bars die jedes Item hat durchlaufen und das aktive Bar bekommen. Sicherlich könnte ich mir ein mehrdimensionales Array parallel bilden wenn ich die Items und dessen Bars erstelle und das jeweilige Handle in das Array schreiben, doch das halte ich für unsinnig. Das Teil ist so mächtig, es wird sicherlich mit Bordmitteln gehen. Beim erstellen der Items-Liste und dessen Bars, habe ich jeder Bar die ID aus der Datenbank mitgegeben. Wenn ich die ID der Bar habe, komme ich auf die Properties über diesen Weg an das richtige Bar Object:
Code:
Nun möchte ich wenn der User auf ein Item klickt, das Chart an den Anfang der ersten Bar scrollt.
procedure TfrTerminplan.ChangeBarColor(id:Integer; aColor:TColor);
begin G2antt1.Items.ItemBar[0,Format('<%d>',[id]),EXG2ANTTLib_TLB.exBarColor] := OleVariant(aColor); end; Das Handle des gerade angeklickten Item bekomme ich so:
Code:
Jetzt gibt es noch eine Möglichkeit auf die erste und nächste Bar des Items zu kommen.
item := G2antt1.ItemFromPoint[-1,-1,c,hit];
if ((item>0)and(c=0))then begin end; Doch leider bekomme ich kein Object vom Typ Bar sondern wieder ein Handle. Mir fehlt also die Möglichkeit aus dem Handle ein Object zu machen.
Code:
Gruß Kostas
G2antt1.Items.FirstItemBar[item]
G2antt1.Items.NextItemBar[item,Key] |
AW: Exontrol G2Antt wie Item und Bars durchlaufen
Deswegen haben wir uns den Wrapper geschrieben.
Folgende Funktionen sind per se wichtig: Gantt.Items.ItemByIndex Gantt.Items.FindItem Gantt.Items.ItemParent Gantt.Items.CellValue Gantt.Columns.Item[ColumnNameAsString].Index Du mußt immer unterscheiden zwischen Item und Handle, das etwas difus manchmal. Wir haben jedem Node eine Spalte gegeben, welche einen internen Primärschlüssel hält. Dadurch kann ich die Nodes finden und identifizieren, via "Gantt.Items.FindItem", welches mir das Handle des Nodes gibt. Anschliessend kann man via "Gantt.Items.CellValue[ItemHandle, Gantt.Columns.Item[Column].Index]:=Value;" den Columnwert setzen. Daniel |
AW: Exontrol G2Antt wie Item und Bars durchlaufen
[Edit]
so, jetzt habe ich es. Damit kann beim anklicken eines Items in der Liste(nicht im Chart) auf die erste Bar gescrollt werden.
Delphi-Quellcode:
procedure TfrTerminplan.G2antt1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var item,c,BarCount, n:Integer; hit :EXG2ANTTLib_TLB.HitTestInfoEnum; bar :integer; tmpDatum, ScrollDatum:TDateTime; begin inherited; try ScrollDatum := StrToDate('31.12.9999'); {angeklicktes Item abfragen} item := G2antt1.ItemFromPoint[-1,-1,c,hit]; {gültiges Item auf ItemListe angeklickt (nicht im Chart)} if ((item>0)and(c=0))then begin {Anzahl der Bars des Items abfragen} BarCount := G2antt1.Items.ItemBar[item,'<*>',EXG2ANTTLib_TLB.exBarsCount]; for n := 0 to BarCount-1 do begin if n=0 then bar := G2antt1.Items.FirstItemBar[item] {zum ersten Bar springen} else bar := G2antt1.Items.NextItemBar[item,bar]; {zur nächsten Bar springen} {Startdatum der Bar abfragen} tmpDatum := StrToDate(G2antt1.Items.ItemBar[item,bar,EXG2ANTTLib_TLB.exBarStart]); {das jüngste Datum merken} ScrollDatum := Min(ScrollDatum, tmpDatum); end; {Das Chart scrollen} G2antt1.Chart.ScrollTo(ScrollDatum,exScrollUp); end; except {Exception durch falsches klicken ignorieren} on EVariantInvalidArgError do begin end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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 by Thomas Breitkreuz