TMS Komponenten



  • Hallo Leute...

    Ich versuche verzweifelt herauszubekommen wie ich die Komponenten von TMS-Software im C++ Builder benutzen kann.
    Die Doku ist voll für den Ar*** (Sorry wegen der harten ausdruckweise 😉 )

    Kenn sich jemand damit aus oder kann mir jemand eine Alternative nennen die besser Dokumentiert ist?

    Ich bin noch relativ neu im Bereich C++ (erst 1 Schuljahr)...

    In erster Linie geht es darum die Komponente AdvCardList zu benutzen. Leider sind nur beispiele für Delphi vorhanden...

    Hier der Demo-Quellcode:

    {***************************************************************************}
    { TAdvCardList sample application                                           }
    {                                                                           }
    { written by TMS Software                                                   }
    {            copyright © 2005                                               }
    {            Email : info@tmssoftware.com                                   }
    {            Web : http://www.tmssoftware.com                               }
    {***************************************************************************}
    
    unit UAdvCardListDemo;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
      Dialogs, AdvCardList, StdCtrls, AdvCardListStyler, JPEG, ExtCtrls
      {$IFDEF VER150}
      , XPMan
      {$ENDIF}
      {$IFDEF VER170}
      , XPMan
      {$ENDIF}
      ;
    
    type
      TForm1 = class(TForm)
        AdvCardList1: TAdvCardList;
        Button1: TButton;
        AdvCardListStyler1: TAdvCardListStyler;
        Panel1: TPanel;
        ComboBox1: TComboBox;
        CheckBox1: TCheckBox;
        Label1: TLabel;
        CheckBox2: TCheckBox;
        ComboBox2: TComboBox;
        Label2: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
        procedure CheckBox2Click(Sender: TObject);
        procedure ComboBox2Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure AddCard(ACaption, AType, AWeb:string; APrice: Integer; AImage:string; ADate: TDateTime; Avail: Boolean);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R carddemo.res}
    {$R *.dfm}
    
    procedure TForm1.AddCard(ACaption, AType, AWeb: string; APrice: Integer;
      AImage: string; ADate: TDateTime; Avail: Boolean);
    var
      ac: TAdvCard;
      ms: TMemoryStream;
      reshandle: THandle;
      hglobal: THandle;
      ptr: Pointer;
      ressize: integer;
      JPEGImage: TJPEGImage;
    
    begin
      ac := AdvCardList1.Cards.Add;
      ac.Caption := ACaption;
      ac.ItemList[0].AsString := AType;
      ac.ItemList[1].AsString := AWeb;
      ac.ItemList[2].AsInteger := APrice;
      if AImage <> '' then
      begin
        reshandle := FindResource(hinstance, PChar(AImage), PChar(RT_RCDATA));
        if reshandle <> 0 then
        begin
          hglobal := LoadResource(hinstance, reshandle);
          ms := TMemoryStream.Create;
          try
            ressize := SizeOfResource(hinstance, reshandle);
            ptr := LockResource(hglobal);
            ms.WriteBuffer(ptr^,ressize);
            ms.Position := 0;
            JPEGImage := TJPEGImage.Create;
            try
              JPEGImage.LoadFromStream(ms);
              ac.ItemList[3].Picture.Assign(JPEGImage);
            finally
              JPEGImage.Free;
            end;  
          finally
            FreeResource(reshandle);
            ms.Free;
          end;
        end;
      end;
      ac.ItemList[4].AsDate := ADate;
      ac.ItemList[5].AsBoolean := Avail;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      // load cards
      AdvCardList1.BeginUpdate;
      AddCard('Mercedes','SLK','www.mbusa.com',50,'slk',encodedate(2004,10,1),true);
      AddCard('Mercedes','SLR','www.mbusa.com',450,'slr',encodedate(2004,6,1),true);
      AddCard('Mercedes','SL','www.mbusa.com',150,'sl',encodedate(2001,11,1),false);
      AddCard('Mercedes','CL','www.mbusa.com',140,'cl',encodedate(2000,4,1),false);
      AddCard('Porsche','911','www.porsche.com',120,'p911',encodedate(1997,8,1),false);
      AddCard('Porsche','Boxster','www.porsche.com',120,'boxster',encodedate(1997,8,1),false);
      AddCard('BMW','M3','www.bmw.com',95,'m3',encodedate(2003,2,1),true);
      AddCard('BMW','645','www.bmw.com',135,'b645',encodedate(2004,9,1),false);
      AddCard('BMW','Z4','www.bmw.com',75,'z4',encodedate(2004,3,1),false);
      AddCard('Aston Martin','DB9','www.astonmartin.com',175,'db9',encodedate(2003,2,1),true);
      AddCard('Ferrari','355','www.ferrari.it',275,'f355',encodedate(1996,2,1),true);
      AdvCardList1.EndUpdate;
      // present horizontal scrollbar
      AdvCardList1.LeftCol := 0;
    end;
    
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      case combobox1.itemindex of
      0: Advcardlist1.SortSettings.SortType := stCaption;
      1,2,3:
        begin
          Advcardlist1.SortSettings.SortIndex := combobox1.itemindex - 1;
          Advcardlist1.SortSettings.SortType := stItem;
        end;
      4,5:
        begin
          AdvCardList1.SortSettings.SortIndex := combobox1.itemindex;
          AdvCardList1.SortSettings.SortType := stItem;
        end;
      end;
      AdvCardList1.LeftCol := 0;
    end;
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      AdvCardList1.MultiSelect := checkbox1.Checked;
    end;
    
    procedure TForm1.CheckBox2Click(Sender: TObject);
    begin
      AdvCardList1.CardHoverAppearance.Enabled := checkbox2.Checked;
    end;
    
    procedure TForm1.ComboBox2Change(Sender: TObject);
    begin
      AdvCardListStyler1.Style := TAdvCardListStyle(combobox2.ItemIndex);
    end;
    
    end.
    

    Im vorhinein schon mal vielen Dank!

    mfg
    Florian



  • Na komm, der Delphi-Text ist doch nicht wirklich schwer zu lesen. Fang einfach mal an mit der Umsetzung, wir helfen dann weiter.

    Tip für den Einstieg: Das Laden des Bildes aus der Resource (Zeilen 61-66,74-98) kannst du erstmal weglassen, ItemList[3] bleibt einfach leer.



  • Das geht schonmal:

    AdvCardList1 -> Cards -> Add() -> Caption = "Karte 1";
    AdvCardList1 -> Cards -> Add();
    AdvCardList1 -> Cards -> Items[1] -> Caption = "Karte 2";
    

    2 Verschiedene wege um Karten und zuordnungen zu erstellen...

    Meiner meinung nach geht das so:

    AdvCardList1 -> Cards -> Items[0] -> ItemList[0] -> Value = "Test";
    

    oder so:

    AdvCardList1 -> Cards[0] -> Items -> ItemList[0] -> Value = "Test";
    

    Ich hab zwar noch viel mehr ausprobiert aber jedesmal spring er in die zeile und sagt:

    [C++ Fehler] uMain.cpp(73): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
    

    Langsam weiß nich nicht mehr was ich noch probieren soll um die Values zur laufzeit zuzuweisen...



  • Ungetestet, nur umgeformte Syntax:

    void __fastcall TForm1::AddCard(AnsiString ACaption, AnsiString AType, AnsiString AWeb,
                                 int APrice, AnsiString AImage, TDateTime ADate, bool Avail)
    {
      TAdvCard *ac = AdvCardList1->Cards->Add();
      ac->Caption = "bla";
      ac->ItemList[0]->AsString = "blub";
      ...
      ac->ItemList[5]->AsBoolean = Avail;
    }
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      // load cards
      AdvCardList1->BeginUpdate();
      AddCard("Mercedes", "SLK", "www.mbusa.com", 50, "slk", EncodeDate(2004,10,1), true);
      AdvCardList1->EndUpdate();
      // present horizontal scrollbar
      AdvCardList1->LeftCol = 0;
    }
    


  • Vielen Dank für die schnelle Antwort...
    Leider konnte ich es erst heute ausprobieren.

    Hat leider nicht ganz so funktioniert...
    Falls es jemanden interessiert oder jemand das gleiche problem hat:

    void __fastcall AddCard(AnsiString AName, AnsiString AVorname, AnsiString AStrasse,
                                 AnsiString AHausnr, AnsiString APLZ, AnsiString AOrt, AnsiString ATel,
                                 AnsiString AHandy, AnsiString AICQ, AnsiString AStatus)
    {
      TAdvCard *ac = frmMain -> AdvCardList1->Cards->Add();
      ac -> Caption = AName + ", " + AVorname;
      ac -> ItemList -> Items[0] -> AsString = AStrasse + " " + AHausnr;
      ac -> ItemList -> Items[1] -> AsString = APLZ + " " + AOrt;
      ac -> ItemList -> Items[2] -> AsString = ATel;
      ac -> ItemList -> Items[3] -> AsString = AHandy;
      ac -> ItemList -> Items[4] -> AsString = AICQ;
      ac -> ItemList -> Items[5] -> AsString = AStatus;
    
    }
    
    AdvCardList1->BeginUpdate();
      AddCard("DeinNachname","DeinVorname","DeineStrasse","DeineHausnummer","DeinePLZ","DeineStadt","DeineTelefonnummer","DeineHandynummer","DeineICQ_Nummer","DeinStatus");
      AdvCardList1->EndUpdate();
      AdvCardList1->LeftCol = 0;
    

    Getestet mit Borland C++ Builder 5 Pro

    mfg Skytrance


Anmelden zum Antworten