AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TRadioGroup klickt falsch

Ein Thema von stahli · begonnen am 30. Jan 2007 · letzter Beitrag vom 31. Jan 2007
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#1

TRadioGroup klickt falsch

  Alt 30. Jan 2007, 08:10
Hallo alle,

ich habe von TRadioGroup eine datenbanksensitive Komponente abgeleitet, die Daten aus einer Datenbank anzeigen und ändern kann (jeweils durch Auswählen eines Eintrages).
Auch "Übersetzungen" sind möglich, also kann kann man festlegen, dass z.B. der Eintrag "grün" aus der Box dem Wert "g" in der Datenbank entspricht etc.
Das funktioniert soweit wunderbar

Das Problem ist die Methode Click.
Wenn meine Kompo den Fokus hat und das übergeordnete Formular geschlossen und später wieder geöffnet wird, wird das Click-Ereignis ausgeführt (wodurch meine Kompo den aktuell selktierten Eintrag in die Datenbank schreibt). Das kann aber nach einem Datensatzwechsel ein ungültiger Eintrag sein
Ich behelfe mir vorläufig damit, dass ich beim Öffnen des Formulars (OnActivate) einer anderen Komponente den Fokus übergebe. Das ist natürlich noch keine allgemeingültige Lösung des Problems.

Letztlich wird der falsche RadioGroup-Click beim Anzeigen des Formulars durch die Methode UpdateButtons aufgerufen (was ich tatsächlich ziemlich unnsinnig finde, da ja hier niemand etwas anklickt). Diese und die damit zusammenhängenden Methoden lassen sich aber nicht überschreiben, so dass ich darauf nicht gesondert reagieren kann. Ich möchte auch gern vermeiden, die komplette Unit ExtCtrls neu zu erfinden...

Kann ich also innerhalb meiner Kompo irgendwie erkennen, dass das Formular, in dem sich diese befindet, geschlossen oder geöffnet wird? Kann man dazu ein Ereignis abfragen?
Paint, Update und Refresh funktionieren nicht, da Click bereits vorher aufgerufen wird.


Danke
Stahli
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: TRadioGroup klickt falsch

  Alt 30. Jan 2007, 09:40
Hallo Stahli,

eine direkte Hilfe habe ich nicht. Aber suche mal nach etwas wie Mode oder State für die Komponente oder (sicherer) für das Formular: Der Inhalt von Click soll erst ausgeführt werden, wenn das Formular endgültig aktiviert ist. Vielleicht wirst Du in dieser Richtung fündig.

Viel Erfolg! Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: TRadioGroup klickt falsch

  Alt 30. Jan 2007, 10:51
Hallo Jürgen,

ComponentState hat mir leider nicht weitergeholfen, da die Komponente beim Einblenden des Formulars ja nicht erzeugt wird o.ä.

Ereignisbehandlungen im Formular selbst möchte ich gern vermeiden, da die Komponente in jedem normalen Formular funktionieren soll.

Stahli
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: TRadioGroup klickt falsch

  Alt 30. Jan 2007, 12:13
Hallo,

ich meinte nicht, dass der Formular-Code angepasst werden sollte, sondern etwas in der Art:
Delphi-Quellcode:
procedure TRadioGroupSpecial.ButtonClick(Sender: TObject);
var TForm: frm;
begin
  frm := (Sender as TRadioGroupSpecial).ParentForm;
  if frm.Active then
  begin
    // erst jetzt kommen die gewünschten Maßnahmen
  end;
end;
So kann es noch nicht klappen: Ich erinnere mich nicht mehr, wie ich auf die Schnelle das Container-Formular zu einer Komponente erhalte; und ich weiß auch nicht, was zuerst kommt: der unerwünschte Click oder Form.Active. Aber in dieser Richtung kannst Du ausprobieren.

Viel Erfolg! Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TRadioGroup klickt falsch

  Alt 30. Jan 2007, 19:53
Hallo Jürgen,

so funktioniert es leider nicht da Click aus UpdateButtons aufgerufen wird, bevor das Formular aktiviert wird

Kennt jemand ein Ereignis WM_ParentFormWird(De)Aktiviert?

Stahli
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#6

Re: TRadioGroup klickt falsch

  Alt 30. Jan 2007, 22:37
Zitat von Jürgen Thomas:
... und ich weiß auch nicht, was zuerst kommt: der unerwünschte Click oder Form.Active.
Kommt darauf an, wo der RadioGroup ein entsprechender ItemIndex zugewiesen wird; das kann schon im FormCreate passieren...
Wo ich greade bei FormCreate bin: um den unerwünschten RadioGroupClick zu unterbinden, setze im FormCreate die Anweisung DBRadioGroup1.OnClick := nil (natürlich möglichst am Anfang, auf jeden Fall aber VOR dem entsprechenden Ereignis, was den Click auslöst); im FormActivate als letzte Anweisung dann DBRadioGroup1.OnClick := DBRadioGroup1Click;
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TRadioGroup klickt falsch

  Alt 31. Jan 2007, 00:01
So, ich habe einiges versucht und wenig herausgefunden:

Zuerst habe ich ermittelt, welche Botschaften meine Kompo erhält. Die sind aber nicht signifikant anders, wenn die "problematische Öffnung" des Formulars erfolgt.
Delphi-Quellcode:
procedure TDBRadioGroupSql.WndProc(var Message: TMessage);
begin
  info('Message.Msg='+IntToStr(Message.Msg)+' ('+IntToHex(Message.Msg,4)+')');
Dann habe ich die Unit ExtCtrls in mein Projekt als XxxExtCtrls kopiert und den Quelltext debugt. Das half nur etwas.
Ich habe zumindest festgestellt, dass UpdateButtons durch die GroupButton selbst "provoziert" wird
Delphi-Quellcode:
procedure TGroupButton.CNCommand(var Message: TWMCommand);
begin
  if not FInClick then
  begin
    FInClick := True;
    try
      if ((Message.NotifyCode = BN_CLICKED) or
        (Message.NotifyCode = BN_DOUBLECLICKED)) and
        TCustomRadioGroupXxx(Parent).CanModify then
        inherited;
    except
      Application.HandleException(Self);
    end;
    FInClick := False;
  end;
end;
Aber die Ereignisbehandlung auch noch zu kontrollieren und alles neu abzuleiten ist ja auch nicht praktikabel.

Fazit:
- TRadioGroup ist nicht gerade sauber programmiert (Click heißt eben für mich Clickl!)
- Meine Kompo wird mit einer kleinen Besonderheit zu behandeln sein, wenn man sie in ein- und ausblendbaren Formularen einsetzt (Ist aber nicht meine Schuld!!! )

Stahli

@raiguen: Danke für Deinen Hinweis. Dazu muss man aber eben in jeder Anwendung wieder etwas im Formular beachten, was ich gern vermeiden wollte. Das geringste Übel ist wohl, bei der Formaktivierung den Fokus auf eine unproblematische Komponennte zu setzen... Dann Klickt TRadioGroup nicht mehr sinnlos herum.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:32 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