Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tutorial für JVInspector gesucht (https://www.delphipraxis.net/67295-tutorial-fuer-jvinspector-gesucht.html)

TBx 12. Apr 2006 14:21


Tutorial für JVInspector gesucht
 
Hallo @all!

Ich möchte gerne den JVInspector aus den Jedis einsetzen.

Allerdings stehe ich auch nach Studium der Beispiele noch ziemlich auf dem Schlauch.

Kennt jemand ein entsprechendes Tutorial?

Viele Grüße

onlinekater

Loki77 12. Apr 2006 14:47

Re: Tutorial für JVInspector gesucht
 
Schau mal unter Jedi Online-Hilfe
Ist kein Tutorial, kann die aber vielleicht mehr sagen als die samples....

TBx 12. Apr 2006 15:10

Re: Tutorial für JVInspector gesucht
 
Danke für den Tip.

Aber so richtig hilft mir das leider auch noch nicht weiter. :wall:

Ich wäre auch an Codeschnippseln interessiert, die die Handhabung verdeutlichen.

Gruß

onlinekater :cat:

jim_raynor 12. Apr 2006 15:31

Re: Tutorial für JVInspector gesucht
 
Nun meine Erfahrung mit dem JvInspector ist, dass er ziemlich flexibel ist und man eigentlich alles realisieren kann, was man von einem ObjektInspector erwartet. Das große Problem ist nur, wie du ja selbst feststellst, die Handhabung. Ich habe sogut wie alles nur über probieren und studieren der Quellcodes rausbekommen ...

Was möchtest du denn konkret machen, vielleicht haben wir ja paar Tipps für dich.

TBx 12. Apr 2006 16:04

Re: Tutorial für JVInspector gesucht
 
Hallo Christian!

Ich möchte mehrere miteinander verbundene Datasets zum Editieren darstellen.
Vom MainDataset wird nur ein Datensatz dargestelln, von den untergeordneten Datasets sollen dann aber alle Datensätze dargestellt werden.

Gibt es da eine Möglichkeit?
Das MainSet füge ich über eine Konstruction ala
Delphi-Quellcode:
TJvInspectorDBData.New(JvInspector1.Root, DataSource1, ['LastName', 'FirstName']);
ein.
Für die Detaildatasets habe ich so bisher noch nichts gefunden :?
Muß ich da womöglich alle Datensätze per Code zufügen (Schleife o. ä.)?

Gruß

Thomas :coder:

BTW: Ich habe bei der Suche festgestell, daß Du des öfteren auf JVInspector verweist. Nutzt Du den oft?
Wärest Du evtl. daran interessiert, an einem entsprechenden Tutorial mitzuwirken, wenn es noch keines gibt?

jim_raynor 12. Apr 2006 17:09

Re: Tutorial für JVInspector gesucht
 
Oi. Da muss ich ja gestehen, dass mein Datenbankwissen in Verbindung sehr sehr löchrig ist ^^. Und dann noch in Verbindung mit dem JvInspector ... da muss ich leider passen.

Den JvInSpector nutze ich eigentlich nur in den Editoren zu meinem Projekt X-Force (Sourcecodes sind über Sourceforge erhältlich). Und dort erstelle ich jeden Eintrag selbst und nutze als Data-Objekte reine Pointer auf die Daten. Und das ich das umgesetzt habe, ist auch schon wieder ein ganzes weilchen her :).

Um das Problem korrekt zu verstehen: Du möchtest in einem Inspector sowohl den Hauptdatensatz als auch die zugehörigen Untersätze anzeigen? Sollen die Daten auch bearbeitet werden können? Dann wird es, so glaube ich, sehr schwierig. Die Problematik ist, dass diese Datasources Satz-Bezogen sind. Heisst du wirst um eine Schleife nicht drum rumkommen. Kann mir kaum vorstellen, dass der JvInspector in diesem Fall alle Sätze gleichzeitig anzeigen lassen kann (zumindestens mit den vorgefertigten Funktionen).

Hab auch leider kein Delphi hier, so dass ich mir garnichts anschauen kann ... vielleicht zur späterer Stunde nochmal ;)

Zitat:

Zitat von onlinekater
Wärest Du evtl. daran interessiert, an einem entsprechenden Tutorial mitzuwirken, wenn es noch keines gibt?

Mitwirken könnte ich mir vorstellen, aber selbst erstellen nicht ;) Dafür fehlt mir leider die Zeit.

P.S: Mist, hab erst hintergesehen, dass du ja "zum Editieren" geschrieben hast ... Das wird glaube schwierig ...

TBx 18. Apr 2006 08:00

Re: Tutorial für JVInspector gesucht
 
*push*

jim_raynor 20. Apr 2006 18:54

Re: Tutorial für JVInspector gesucht
 
Vielleicht mal als Denkanstoss. Folgendermaßen hab ich es bei mir gelöst:

1. habe ich mir einen Speicherbereich mit

Delphi-Quellcode:
var
  Adress: Integer;
  MemoryPool: Pointer;

MemoryPool:=GetMemory(20000);
ZeroMemory(memoryPool,20000);
Adress:=Integer(MemoryPool);
angelegt, in dem die zu bearbeitenden Daten abgelegt werden. Das Problem ist, dass die TJvInspectorVarData nur auf Pointer arbeitet. Man kann zwar auch mit einem entsprechenden Data-Objekt auf ein Feld eines Objektes (published) zugreifen, aber das war für meine Problemstellung nicht möglich.

In diesem MemoryPool werden nun hintereinander die Daten abgelegt und passende Data-Objekte erzeugt.

Delphi-Quellcode:
  for Dummy:=0 to fRecord.ValueCount-1 do
begin
  case fRecord.Values[Dummy].ValueType of
    ervtCardinal:
      begin
        // Data-Objekt erzeugen
        NewItem := TJvInspectorVarData.New(JvInspector.Root,fRecord.GetValueProperty(Dummy,'Name'),typeInfo(Cardinal),PCardinal(Adress));
        // Wert in MemoryPool übertragen
        PCardinal(Adress)^:=fRecord.Values[Dummy].valueCar;
        // Zeiger verschieben
        inc(Adress,sizeOf(Cardinal));
      end;
    ervtInteger:
      begin
        NewItem := TJvInspectorVarData.New(JvInspector.Root,fRecord.GetValueProperty(Dummy,'Name'),typeInfo(Integer),PCardinal(Adress));
        PCardinal(Adress)^:=fRecord.Values[Dummy].valueInt;
        inc(Adress,sizeOf(Cardinal));
      end;
    ervtInteger:
      begin
        NewItem := TJvInspectorVarData.New(JvInspector.Root,fRecord.GetValueProperty(Dummy,'Name'),typeInfo(String),PString(Adress));
        PString(Adress)^:=fRecord.Values[Dummy].valueString;
        inc(Adress,sizeOf(String));
      end;
   end;
end;
Am Ende der Bearbeitung musst du natürlich wieder die Werte in die Quelle übertragen. Das sieht dann ähnlich aus:

Delphi-Quellcode:
 Adress:=Integer(MemoryPool);
  for Dummy:=0 to fRecord.ValueCount-1 do
  begin
    case fRecord.Values[Dummy].ValueType of
      ervtCardinal:
      begin
        fRecord.SetCardinal(fRecord.Values[Dummy].ValueName,PInteger(Adress)^);
        inc(Adress,sizeOf(Cardinal));
      end;
      ervtInteger:
      begin
        fRecord.SetInteger(fRecord.Values[Dummy].ValueName,PInteger(Adress)^);
        inc(Adress,sizeOf(Integer));
      end;
      ervtString:
      begin
        fRecord.SetString(fRecord.Values[Dummy].ValueName,PString(Adress)^);
        inc(Adress,sizeOf(String));
      end;
    end;
Wichtig ist, dass beim übernehmen die gleichen Werte genommen werden, wie beim befüllen des MemoryPools, da es sonst zu ungereimtheiten kommt.

Zugegeben eine ziemliche Frickellösung, aber wie gesagt, funktioniert klaglos. Eventuell kannst du es gebrauchen. Vielleicht gibt es aber für dein Problem eine wesentlich einfachere Lösung.


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