AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls TValueListEditor automatisch füllen Funktion deaktivieren
Thema durchsuchen
Ansicht
Themen-Optionen

TValueListEditor automatisch füllen Funktion deaktivieren

Ein Thema von Gashunkification · begonnen am 1. Okt 2012 · letzter Beitrag vom 2. Okt 2012
Antwort Antwort
Gashunkification

Registriert seit: 18. Mär 2012
9 Beiträge
 
#1

TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 1. Okt 2012, 23:34
*murmel* das ist so ziemlich der blödeste Titel für ein Thema der mir je eingefallen ist */murmel*

Hallo liebe Community...
Ich hab ein ernsthaft (nerviges) Problem mit dem ValueListEditor aus der VCL (Reiter -> Zusätzlich).

Folgendes:

Ich schreibe momentan ein Programm um eine spezifische Ini-Datei zu bearbeiten.
Da in dieser unteranderem auch Mengenwerte vorkommen, sprich Value=(v1,v2,v3,...,vn), habe ich das über die GUI so gelöst, dass ich
einfach nur alle später zu speichernden Daten in einem array of record abspeichere um sie dann in den ValueListEditor zu schreiben.
An sich klappt das auch allerdings...!:

Der VLE hat die dumme Eigenschaft, dass er aus mir unerfindlichen Gründen den Wert aus der LETZTEN Zelle (in meinem Fall der String "true" bzw. "false") in alle vorherigen Zellen schreibt, ausgenommen der ersten!

Anbei ein Bild um das zu verdeutlichen.


Hier noch die Prozedur, die (eiegentlich) die Werte schreiben soll ....


Delphi-Quellcode:
procedure TfrmMainForm.btnNewMutClick(Sender: TObject);
var s: String;
    y: Integer;
begin

  // Wave = der oben beschriebene Record. Geschrieben werden soll immer der Wert
  // aus dem aktuell letzten Wave-Element, daher Wave[High(Wave)]...

  if Sender = btnNewMut then valListMutatoCfg.InsertRow(#32,#32, true)
  else
    begin
      valListWave.InsertRow(#32,#32,true);
      y := valListWave.RowCount-1;

      for s in Wave[High(Wave)].MonsterNum do
        valListWave.Cells[0, y] := valListWave.Cells[0, y] + s + ',';

      for s in Wave[High(Wave)].BossMobs do
        valListWave.Cells[1, y] := valListWave.Cells[1, y] + s + ',';

      valListWave.Cells[2, y] := IntToStr(Wave[High(Wave)].WaveLength);
      valListWave.Cells[3, y] := IntToStr(Wave[High(Wave)].WaveCountDown);
      valListWave.Cells[4, y] := IntToStr(Wave[High(Wave)].MonstersPerPlayer);
      valListWave.Cells[5, y] := IntToStr(Wave[High(Wave)].MaxMonsters);
      valListWave.Cells[6, y] := Wave[High(Wave)].AllowPortals;


    end;
end;
Kann man denn nicht irgendwo im Objektinspektor oder meinetwegen auch im Quellcode eine Eigenschaft setzen, die dem VLE das automatische Ersetzen verbietet?
Mit
ItemProps[VLE.Cells[x,y]].ReadOnly := True; habe ich es auch schon erfolglos versucht ....

... hoffentlich könnt ihr mir weiterhelfen ...

MfG

Gashunkification
Miniaturansicht angehängter Grafiken
erlaeuterung_1.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 08:40
Der ValueListEditor ist intern nur für die Verarbeitung von zwei Spalten ausgelegt. Wie hast du überhaupt die übrigen Spalten da rein gekriegt?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Gashunkification

Registriert seit: 18. Mär 2012
9 Beiträge
 
#3

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 09:15
Das war gar nicht so schwer (Ich sitze gerade an der Arbeit, daher erstmal nur theoretisch der Code, heute Abend kann ich den richtigen nachliefern):

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // ....
  // Ich nenne das Ding jetzt der Einfachheit halber "vle"...
  vle.ColCount := 7; // <- Ja das geht ... keine Ahnung ob, bzw. was ich vorher in den Options geändert habe, aber es geht...
 
  // Und dann habe ich im Objektinspektor noch unter den ... Keys (??) (evtl. KeyNames - irgendwie sowas, wie gesagt, grade an der Arbeit, kann nicht
  // gucken) die ganzen Strings eigegeben ... also "Monsternamen", "Bossmonster" etc...
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#4

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 09:31
Baut TValueListEditor nicht auf einem TStringGrid auf? (dann könnte die Anzeige zwar mehr Spalten, aber die interne Verwaltung nicht unbedingt)
Aber mit den 2 Spalten hast du eigentlich schon Recht.

Fazit: Das ist die falsche Komponente, für dein Vorhaben.

ValueList = Liste mit 2 Name/Value-Werten (nicht mehr und nicht weniger)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Okt 2012 um 09:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 09:50
Das war gar nicht so schwer (Ich sitze gerade an der Arbeit, daher erstmal nur theoretisch der Code, heute Abend kann ich den richtigen nachliefern):

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  // ....
  // Ich nenne das Ding jetzt der Einfachheit halber "vle"...
  vle.ColCount := 7; // <- Ja das geht ... keine Ahnung ob, bzw. was ich vorher in den Options geändert habe, aber es geht...
 
  // Und dann habe ich im Objektinspektor noch unter den ... Keys (??) (evtl. KeyNames - irgendwie sowas, wie gesagt, grade an der Arbeit, kann nicht
  // gucken) die ganzen Strings eigegeben ... also "Monsternamen", "Bossmonster" etc...
end;
Ich weiß ja nicht, welche Delphi-Version du benutzt, aber in XE2 ist ColCount read-only.

Ganz deutlich wird es aber, wenn man sich GetCell und SetCell betarchtet. Dort wird nämlich lediglich auf Col=0 abgeprüft und zum Speichern der Werte eine erweiterte StringList benutzt, wobei dort im Wesentlichen die Name-Value-Funktionalität verwendet wird.

Wie Himitsu schon sagte: falsche Komponente!

Unter der Annahme, daß alle Zeilen einen identischen Satz an Eigenschaften (Spalten) haben, kommt einem direkt der Gedanke einer Datenbanktabelle. Vielleicht solltest du mal einen Ansatz mit einem ClientDataSet durchdenken.

Ein weiterer Unterschied eines solchen DatenGrids zum ValueListEditor ist auch, daß bei einem ValueListEditor die Value-Spalte in jeder Zeile einen anderen Datentyp mit unterschiedlichen Eigenschaften und Editiermöglichkieten enthalten kann (ähnlich dem ObjektInspektor). Bei einem Datengrid sind alle Zeilen gleich aufgebaut - dafür kann eine Zeile aber mehrere Spalten (Felder) haben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Gashunkification

Registriert seit: 18. Mär 2012
9 Beiträge
 
#6

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 12:06
Gut, dann wird es eine andere Komponente ...
Schade eigentlich, der ValueListEditor sieht nämlich recht hübsch aus

Allerdings werde ich wohl von einer ganzen Datenbank abesehen, einfach des Aufwandes halber wegen. Ich denke dann wird es die StringGrid werden.

Nun gut, danke nochmals für die schnelle Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#7

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 12:43
Man kann DataSets auch ohne Datenbank verwenden. (TClientDataSet, oder Memory-DataSets anderer Hersteller)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#8

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 14:05
Allerdings werde ich wohl von einer ganzen Datenbank abesehen, einfach des Aufwandes halber wegen.
Deswegen erwähnte ich ja TClienDataSet.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Gashunkification

Registriert seit: 18. Mär 2012
9 Beiträge
 
#9

AW: TValueListEditor automatisch füllen Funktion deaktivieren

  Alt 2. Okt 2012, 19:48
Man kann DataSets auch ohne Datenbank verwenden. (TClientDataSet, oder Memory-DataSets anderer Hersteller)
Deswegen erwähnte ich ja TClienDataSet.
Oh, das wusste ich nicht. Ich bin noch "relativ" unerfahren was das Programmieren im ... nun ich will es mal "sinnvollen" Bereich angeht.
Will sagen, ich fange jetzt endlich an, nach 2 Jahren des Lernens an der FOS, Programme zu schreiben, die über den reinen Lernfaktor hinausgehen.
Entsprechend gering sind meine Kenntnisse der Komponentenpallete von Delphi.

Aber trotzdem Danke für den Hinweis
  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 12:30 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