AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Exontrol G2Antt wie Item und Bars durchlaufen

Ein Thema von Kostas · begonnen am 16. Jul 2013 · letzter Beitrag vom 17. Jul 2013
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 16. Jul 2013, 22:58
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 := G2antt1.Items.AddItem('<b>'+qrGewerke.FieldByName('A_BEZEICHNUNG').AsString+'</b>');
h ist dabei nicht wie erwartet ein Object vom Typ Item sondern ein integer. Also eine Referent auf das item.
Somit kann ich h.caption := 'Ein Text' nicht übergeben.

Gruß Kostas

Geändert von Kostas (17. Jul 2013 um 09:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 16. Jul 2013, 23:17
Was ist das? (Ich verstehe gerade nur Bahnhofskantine)

Wird da nicht der ItemIndex zurückgegeben?

Edit:

Da wird ein Handle auf das Item zurückgegeben ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (16. Jul 2013 um 23:32 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 17. Jul 2013, 09:31
Was ist das? (Ich verstehe gerade nur Bahnhofskantine)

Wird da nicht der ItemIndex zurückgegeben?

Edit:

Da wird ein Handle auf das Item zurückgegeben ...
ja, es wird nicht der Index zurückgegeben. Es ist vermutlich das Handle.
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:
G2antt1.Items.ItemBar[item,'<*>',EXG2ANTTLib_TLB.exBarsCount];
Parameter1 ist das Handle des Items mit dessen Bars.
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 17. Jul 2013, 09:53
Evtl. weil du da ein COM Objekt ansprichst?

Hast du dir die HowTo für Delphi angesehen?
http://www.exontrol.com/howto.jsp?la...roduct=eXGantt

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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 17. Jul 2013, 10:27
...

Hast du dir die HowTo für Delphi angesehen?
http://www.exontrol.com/howto.jsp?la...roduct=eXGantt

...
ja, seit ein par Tagen schaue ich mir jedes einzelne Beispiel an.
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:
procedure TfrTerminplan.ChangeBarColor(id:Integer; aColor:TColor);
begin
  G2antt1.Items.ItemBar[0,Format('<%d>',[id]),EXG2ANTTLib_TLB.exBarColor] := OleVariant(aColor);
end;
Nun möchte ich wenn der User auf ein Item klickt, das Chart an den Anfang der ersten Bar scrollt.

Das Handle des gerade angeklickten Item bekomme ich so:
Code:
  item := G2antt1.ItemFromPoint[-1,-1,c,hit];
  if ((item>0)and(c=0))then
  begin

  end;
Jetzt gibt es noch eine Möglichkeit auf die erste und nächste Bar des Items zu kommen.
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:
G2antt1.Items.FirstItemBar[item]
G2antt1.Items.NextItemBar[item,Key]
Gruß Kostas
  Mit Zitat antworten Zitat
DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 17. Jul 2013, 10:29
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
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Exontrol G2Antt wie Item und Bars durchlaufen

  Alt 17. Jul 2013, 10:46
[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;

Geändert von Kostas (17. Jul 2013 um 12:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz