AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ValueListEditor - eintrag einfügen, ohne "änder"-Prozedur
Thema durchsuchen
Ansicht
Themen-Optionen

ValueListEditor - eintrag einfügen, ohne "änder"-Prozedur

Ein Thema von xZise · begonnen am 3. Jan 2007 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

ValueListEditor - eintrag einfügen, ohne "änder"-P

  Alt 3. Jan 2007, 12:47
Ich hoffe mal es ist verständlich

Und zwar habe ich eine ValueListEditor (VLE) in der von Prozedur X daten geschrieben werden.
Nun möchte ich aber nicht, dass der VLE dabei die Methode auslöst, dass was geändert wurde, weil ich nur möchte, dass diese Methode ausgelöst wird, wenn der Benutzer was ändert.
(Ansonsten kommt es zu einer AV )
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: ValueListEditor - eintrag einfügen, ohne "änder&

  Alt 3. Jan 2007, 15:22
Zitat von xZise:
Ich hoffe mal es ist verständlich
Hi,
für mich ehrlich gesagt nicht.

Zitat von xZise:
Und zwar habe ich eine ValueListEditor (VLE) in der von Prozedur X daten geschrieben werden.
Von wem stammt die VLE? Hast du die selbst geschrieben oder ist das eine fertige Komponente? Und wichtiger ist X eine externe Prozedur oder gehört die zur VLE (also wird intern etwas gemacht, oder extern?).

Zitat von xZise:
Nun möchte ich aber nicht, dass der VLE dabei die Methode auslöst
Es wird eher ein Ereignis ausgelöst, die Methode ist nur die Behandlung des Ereignisses. Setzt du dieses Ereignis oder gibt es ein Standardereignis? Wer wird benachrichtigt wenn das passiert? Was genau führt dabei zu AV?

Wenn ich nicht die Antworten auf all diese (offenen) Fragen übersehen habe, würde ich schon sagen, dass es nicht wirklich gut verständlich ist was du möchtest. Schöner wäre es also, wenn du erstmal ausführlich erklären könntest was du machst und wo bzw. warum dabei ein Fehler auftritt.

An sich wird ja irgendwas zu der AV führen, vielleicht solltest du einfach mal in der Ereignisbehandlung prüfen ob diese AV auftreten würde und ggf. eben dafür sorgen, dass das nicht passiert.
Wenn du die Komponente selber schreibst und die AV daher kommt, dass zu irgendeinem Zeitpunkt die Behandlung ausgelöst wird, aber noch keine Methode zugewiesen wurde, so solltest du einfach vorher prüfen ob du einen gültigen Zeiger hast (also assigned(Zeiger)) und nur dann die Behandlung auslösen.
Wenn du die Ereignisbehandlung selber setzt / diese published ist, dann kannst du in Methode X einfach die Adresse der hier aufzurufenden Methode zwischenspeichern, der Ereignisbehandlung den Wert nil geben und vor verlassen von X wieder die gespeicherte Adresse zuweisen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ValueListEditor - eintrag einfügen, ohne "änder&

  Alt 3. Jan 2007, 15:39
Setze die Ereignisprozedur vorher auf nil und nachher weist du ihr wieder die OnChange-Prozedur zu:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  ShowMessage(Edit1.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.OnChange := nil;
  Edit1.Text := 'Hänschen Klein';
  Edit1.OnChange := Edit1Change;
end;
OnChange wird nur ausgelöst, wenn man direkt etwas in das Edit eingibt. Wird Text über die Schaltfläch eingefügt, wird OnChange nicht ausgelöst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#4

Re: ValueListEditor - eintrag einfügen, ohne "änder&

  Alt 3. Jan 2007, 16:02
...oder du nutzt...
Delphi-Quellcode:
procedure machvieledingeinternmitmeinemvle;
begin
  valuelisteditor1.Strings.BeginUpdate;
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.EndUpdate;
end;
... folge ist die methode...
Delphi-Quellcode:
procedure TForm1.ValueListEditor1StringsChange(Sender: TObject);
begin
 showmessage('änderung');
end;
wird nur einmal aufgerufen....du könntest natürlich noch ein flag setzen...

Delphi-Quellcode:
var flagkeinonchangeweilinternverarbeitung:boolean;

procedure machvieledingeinternmitmeinemvle;
begin
  flagkeinonchangeweilinternverarbeitung:=true;
  valuelisteditor1.Strings.BeginUpdate;
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.Add('schlüssel=wert');
  valuelisteditor1.Strings.EndUpdate;
  flagkeinonchangeweilinternverarbeitung:=false;
end;

procedure TForm1.ValueListEditor1StringsChange(Sender: TObject);
begin
  if flagkeinonchangeweilinternverarbeitung then exit;

  showmessage('änderung');
end;
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: ValueListEditor - eintrag einfügen, ohne "änder&

  Alt 3. Jan 2007, 19:02
Zitat von Der_Unwissende:
Zitat von xZise:
Ich hoffe mal es ist verständlich
Hi,
für mich ehrlich gesagt nicht.
Schade... Dann wohl nicht...

Zitat von Der_Unwissende:
Zitat von xZise:
Und zwar habe ich eine ValueListEditor (VLE) in der von Prozedur X daten geschrieben werden.
Von wem stammt die VLE? Hast du die selbst geschrieben oder ist das eine fertige Komponente? Und wichtiger ist X eine externe Prozedur oder gehört die zur VLE (also wird intern etwas gemacht, oder extern?).
-> Siehte Komponentenplette
-> Forensuche
=> Es ist eine Dlephikomponente, seit längeren (D6/7 mind.)

Prozedur X ist eine externe Prozedur.
=> Eine Prozedur die innerhalb der Form ist, aber nicht vom VLE ausgelöst wurde.

Zitat von Der_Unwissende:
Zitat von xZise:
Nun möchte ich aber nicht, dass der VLE dabei die Methode auslöst
Es wird eher ein Ereignis ausgelöst, die Methode ist nur die Behandlung des Ereignisses. Setzt du dieses Ereignis oder gibt es ein Standardereignis? Wer wird benachrichtigt wenn das passiert? Was genau führt dabei zu AV?

Wenn ich nicht die Antworten auf all diese (offenen) Fragen übersehen habe, würde ich schon sagen, dass es nicht wirklich gut verständlich ist was du möchtest. Schöner wäre es also, wenn du erstmal ausführlich erklären könntest was du machst und wo bzw. warum dabei ein Fehler auftritt.

An sich wird ja irgendwas zu der AV führen, vielleicht solltest du einfach mal in der Ereignisbehandlung prüfen ob diese AV auftreten würde und ggf. eben dafür sorgen, dass das nicht passiert.
Wenn du die Komponente selber schreibst und die AV daher kommt, dass zu irgendeinem Zeitpunkt die Behandlung ausgelöst wird, aber noch keine Methode zugewiesen wurde, so solltest du einfach vorher prüfen ob du einen gültigen Zeiger hast (also assigned(Zeiger)) und nur dann die Behandlung auslösen.
Wenn du die Ereignisbehandlung selber setzt / diese published ist, dann kannst du in Methode X einfach die Adresse der hier aufzurufenden Methode zwischenspeichern, der Ereignisbehandlung den Wert nil geben und vor verlassen von X wieder die gespeicherte Adresse zuweisen.

Gruß Der Unwissende
Was ist daran so unverständlich, dass du so viel Text schreiben musst?

Die Sachlage ist ganz einfach:

Zitat:
Wir haben:
  • eine Form
  • Eine VLE (Abk. für den TValueListEditor)
  • Prozedur X
  • Prozedur "OnChange"

Nun wird in Prozedur X (es ist nicht von belangen, wer wo und wie sie aufgerufen wird!) etwas im VLE geändert, was die "Änderung"-Prozedur (oben als "Prozedur "OnChange"" bezeichnet) auslöst.
Meine Frage: Gibt es eine Prozedur, die nur ausgelöst wird, wenn ich etwas daran als Benutzer ändere.

Weitere Informationen
Und dann gibt es in DIESER Prozedur eine AV. Warum, ist nicht wichtig, weil es darum geht, dass ich 2 verschiedene Ansichten habe.
Einmal so eine art "Baumstrukutr" und dann einmal eine Tabelle (VLE). Und ich editiere immer beide gleichzeitig.

Problem => Sobald ich im VLE was eine Editiere, muss er es auch im "Baum" ändern.
@ Rest: Ich werde mir den Code nocheinmal genau angucken, und versuchen da was zu verbessern... Aber danke erstmal für eure Bemühungen
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: ValueListEditor - eintrag einfügen, ohne "änder&

  Alt 4. Jan 2007, 20:12
Zitat von xZise:
Was ist daran so unverständlich, dass du so viel Text schreiben musst?
Also erstmal war das nicht soviel Text und nun ja, deine Frage war (für mich) so unverständlich, dass ich eben so viel Text benötigt habe. Wo ist das Problem? Ich werde hier mal keine abfällige Bemerkung dazu machen, aber ganz ehrlich, überleg einfach mal ob man dir mit etwas mehr Text vielleicht besser, schneller und zielgerichteter helfen kann oder nicht.
Also wenn ich da ein paar Sätze mehr, deren Nutzen und die benötigte Zeit (oder was auch immer) gegeneinander abwäge, ....

Zitat von xZise:
Nun wird in Prozedur X (es ist nicht von belangen, wer wo und wie sie aufgerufen wird!) etwas im VLE geändert, was die "Änderung"-Prozedur (oben als "Prozedur "OnChange"" bezeichnet) auslöst.
Meine Frage: Gibt es eine Prozedur, die nur ausgelöst wird, wenn ich etwas daran als Benutzer ändere.

Weitere Informationen
Und dann gibt es in DIESER Prozedur eine AV. Warum, ist nicht wichtig, weil es darum geht, dass ich 2 verschiedene Ansichten habe.
Ich sehe irgendwie nicht, warum es jetzt so unwichtig ist, wo und wann die Aufgerufen wird. Ich dachte eigentlich, dass ich in den vielen Sätzen klar gemacht habe, dass je nach Art des Aufrufs (Ort und Zeitpunkt) unterschiedliche Probleme (ergo Unterschiedliche Lösungen) in Frage kommen. Scheinst das etwas in den falschen Hals bekommen zu haben.
Na ja, jedenfalls ist mir jetzt deutlich klarer wo eigentlich genau das Problem liegt und andere die ein gleiches Problem haben werden es vielleicht auch so sehen. Lösungen wurden schon genug vorgeschlagen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: ValueListEditor - eintrag einfügen, ohne "änder&

  Alt 4. Jan 2007, 21:57
Sry @ Unwissende, aber ich verstehe nicht, was daran so weichtig ist, dass du weißt wann/wo diese Prozedur X aufegrufen wird.

Das Problem liegt auch anscheinend nicht in diese Prozedur, sondern in einer anderen.

PS: Ich hasse es mit TD zu debuggen
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 11:00 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