AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Standardverhalten von Dialogen (ab)ändern

Ein Thema von Alter Mann · begonnen am 28. Aug 2008 · letzter Beitrag vom 30. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Standardverhalten von Dialogen (ab)ändern

  Alt 28. Aug 2008, 20:03
Hallo

Ich habe ein Formular mit dem BorderStyle = bsDialog und zwei Buttons (OK und Abbrechen).
Der OK-Button soll zwei Funktionen übernehmen, wenn Caption = Suche mache das und wenn Caption = Stop mache dies.

Beispiel:
Delphi-Quellcode:
procedure TSuchDialog.btnOKClick(Sender: TObject);
begin
  if (cboColumns.Text = '') or (cboFindText.Text = '') then Exit;
  if btnOK.Caption = '&Suchethen
  begin
    if (FSearchObj is TListView) and (not FSearching) then
    begin
      btnOK.Caption := '&Stop';
      btnCancel.Enabled := false;
      SearchListView;
    end;
  end
  else
  if btnOK.Caption = '&Stopthen
  begin
    Close;
    ModalResult := mrOK;
  end;
end;
Doch egal welche Caption der btnOk hat, der Dialog wird immer geschlossen, auch wenn die erste Bedingung erfühlt ist.

Falls jemand meint CloseQuery hilft hier, das sieht so aus:
Delphi-Quellcode:
procedure TSuchDialog.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := not FSearching;
end;
FSearching wird mit dem Beginn von SearchListView auf 'true' gesetzt und beim beenden der Procedure auf 'false'.

Wie wird es also Richtig gemacht?

Gruß
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 28. Aug 2008, 20:18
Hast du genau '&Suche' eingegeben???
Wenn du im Caption nämlich 'Suche' eingegeben hast dan nimmt er es nicht an

Auserdem ist FSearchObj wirklich TListView oder ein abgeleite klasse von TListView??
Wenn das eine etwas dumme Frage ist dan tut es mir leid dachte nur das du es vieleicht vergessen hast
Nickel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 28. Aug 2008, 20:21
Nutze die Eingenschaft Delphi-Referenz durchsuchenTag des Buttons, dann bist du unabhängig von der Beschriftung der Schaltfläche und du kannst mit Delphi-Referenz durchsuchencase die Funktion abfragen, die er haben soll.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#4

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 28. Aug 2008, 20:43
wo meinst du denn, dass er geschlossen wird???

wenn du ModalResult := mrOK gesetzt hast?

das ist in der tat so, wenn ModalResult einen wert <> mrNone hat, wird der zugehörige Dialog geschlossen. ist aber schon immer so ...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 28. Aug 2008, 21:00
Wäre es nicht -sagen wir- marginal sauberer, zwei Buttons zu verwenden? Einen für 'Stop' und einen für 'Suche'. Sie liegen übereinander uns sichtbar ist entweder der eine oder der andere.

Das Event für den 'Suchen' Knopf verbirgt diesen und macht den "Stop"-Knopf sichtbar und umgekehrt. Über zwei separate und einfach zu verstehende Klick-Events kann man auch die Logik übersichtlich steuern. Denn die Lösung mit den Captions knallt ja, wenn irgendwer die Knöppe mit anderen Beschriftungen versieht (z.B. Internationalisierung). Die Lösung mit der 'Tag'-Eigenschaft ist da schon besser.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 28. Aug 2008, 21:09
Hallo

@NickelM

Klar, verschreiben kann man sich immer!
Nicht aber im diesen Fall.

@Lukie
Das mit der Tag-Eigenschaft ist klar, nur ändert das nichts am Problem.

@grenzgaenger

Nee, sobald SerachListView abgearbeitet und damit 'FSearching = true' ist.

[edit] 'zwischengefunkt'
@alzaimar

Ja und Nein.

Warum zwei Button für die gleiche Aufgabe verwenden?
Im Zeitalter von Quad-Core und Co. mach es zwar egal sein, aber von der Funktionalität nicht.
[/edit]

@All

Mal so nebenbei:

Ist euch eigentlich schon mal aufgefallen, das da etwas Faul ist?

Man nehme eine Hauptform und ein Dialog, bei dem Dialog, BorderStyle = bsDialog.

Im Dialog, zwei Buttons und TEdit welches als property Text veröffentlicht ist,

Im OI : btnOK = Caption = 'OK' = ModalResult = mrOK.
btnCancel = Caption = 'Abbruch' = ModalResult = mrCancel.

Den Dialog aus 'Project->Optione->Formulare->Automatisch Erzeugen' nach 'Project->Optione->Formulare->Verfügbare Formulare'
verschieben.

Und ruft den Dialog im über einen Menüpunkt im Hauptformular etwa so auf:
Delphi-Quellcode:
procedure TForm1.DialogExecute(Sender: TObject);
var
  Ret :Boolean;
  St : String;
begin
  Dialog := TDialog.Create(Self);
  try
    Dialog.ShowModal;
    Ret := SearchDialog.ModalResult = mrOK;
    if Ret then St := Dialog.Text;
  finally
    SearchDialog.Free;
  end;
end;
Angenommen Ihr habt im Edit einen Text eingegeben oder auch nicht, welchen Wert hat Ret wenn Ihr btnOk klickt?

Nicht raten, testen.

Gruß
Angehängte Dateien
Dateityp: zip dlgfind_571.zip (3,4 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 29. Aug 2008, 07:51
Zitat von Alter Mann:
@alzaimar...Warum zwei Button für die gleiche Aufgabe verwenden?
Aber das tun sie doch gar nicht:
Delphi-Quellcode:
procedure TSuchDialog.btnSearchClick(Sender: TObject);
begin
  if (cboColumns.Text = '') or (cboFindText.Text = '') then Exit;
  if (FSearchObj is TListView) and (not FSearching) then
  begin
    btSearch.Visible := false;
    btStop.Visible := true;
    SearchListView;
  end;
end;

procedure TSuchDialog.btnStopClick(Sender: TObject);
begin
  if (cboColumns.Text = '') or (cboFindText.Text = '') then Exit; // Wird das *wirklich* auch beim Stop verwendet?
  Close;
  ModalResult := mrOK;
end;
Wenn Du schon sagst,
Zitat von Alter Mann:
...Der OK-Button soll zwei Funktionen übernehmen
dann solltest/kannst Du genau diese Funktionalität auch so umsetzen. Wozu sollte man sich mit schizophrenen MPS*-Buttons rumschlagen? (*MPS=Multiple PersönlichkeitsStörung)

Das hat alles im Übrigen mit Quadcores etc. nichts zu tun, sondern mit der direkten Umsetzung der Funktionalität ("zwei Funktionen"). Es kann auch Knöpfe geben, die ihre Beschriftung ändern, aber in Abhängigkeit der Beschriftung funktional sehr ähnliches ausführen. Dann würde ich auch nur einen Knopf nehmen.

Zu deiner Frage: Neben den üblichen Flüchtigkeitsfehlern ('Dialog' vs. 'SearchDialog') kannst Du das Funktionsergebnis der Methode 'ShowModal' auswerten und nicht den Wert der Eigenschaft 'ModalResult' (kommt aber -denke ich- aufs Gleiche heraus). Bei mir funktioniert es jedenfalls so wie erwartet.
[edit]Der Linker eliminiert übrigens die Zuweisung 'St := ...' sowie 'Rt := ...', da diese irrelevant sind. [/edit]
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 29. Aug 2008, 18:04
Hi,

Überredet.

MPS*-Buttons Werde ich mir merken.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#9

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 30. Aug 2008, 09:13
auch auf die gefahr hin, dass die psychologen selbst 'ne persönlichkeitsstörung bekommen... hier mal 'n beispiel eines MPS Dialogs ...

wichtig dabei ist, dass man den kopf vom körper trennt... der eine lenkt der andere teil arbeitet... aber nix mischeln ...
Angehängte Dateien
Dateityp: zip teststates_216.zip (2,0 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Standardverhalten von Dialogen (ab)ändern

  Alt 30. Aug 2008, 11:48
So, So

MPS Dialog: OK.

Habe da auch einen der nur ein wenig MPS ist, aber dafür anders.
Angehängte Dateien
Dateityp: zip modalresult_128.zip (2,0 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:55 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