AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit MessageBox.Show

Ein Thema von gfjs · begonnen am 12. Jun 2006 · letzter Beitrag vom 1. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#1

Problem mit MessageBox.Show

  Alt 12. Jun 2006, 20:41
Guten Abend, allerseits.

Ich habe ein mir unerklärliches Phänomen in folgendem Programmteil:

Delphi-Quellcode:
procedure frmSpiel.dummy_Click(sender: System.Object; e: System.EventArgs);
var
  lfdNr, zeile, spalte : integer;
  s: Integer;
  z: Integer;
begin
  if (sender is &Label) then lfdNr := integer((sender as &Label).Tag);
  zeile := (lfdNr DIV 27) + 1;
  if (lfdNr MOD 27) = 0 then dec(zeile);
  spalte := lfdNr MOD 27;
  if spalte = 0 then spalte := 27;
  inc(Auswahl );
  Maximum := Auswahl;
  Zahl.zeile := zeile DIV 3;
  if (zeile MOD 3) = 0 then dec(Zahl.zeile);
  Zahl.zeile := Zahl.zeile*3 + 1;
  Zahl.spalte := spalte DIV 3;
  if (spalte MOD 3) = 0 then dec(Zahl.spalte);
  Zahl.spalte := Zahl.spalte*3 + 1;
  Quadrat.zeile := zeile DIV 9;
  if (zeile MOD 9) = 0 then dec(Quadrat.zeile);
  Quadrat.zeile := Quadrat.zeile*9 + 1;
  Quadrat.spalte := spalte DIV 9;
  if (spalte MOD 9) = 0 then dec(Quadrat.spalte);
  Quadrat.spalte := Quadrat.spalte*9 + 1;
  for s := 1 to 28 - 1 do
  begin
    if (s MOD 3) = (spalte MOD 3) then
    begin
      Basiszahlen[s,zeile].IsPossible := false;
    end;
  end;
  for z := 1 to 28 - 1 do
  begin
    if (z MOD 3) = (zeile MOD 3) then
    begin
      Basiszahlen[spalte,z].IsPossible := false;
    end;
  end;
  for z := Zahl.zeile to Zahl.zeile + 3 - 1 do
    for s := Zahl.spalte to zahl.spalte + 3 - 1 do
    Basiszahlen[s,z].IsPossible := false;
  for z := Quadrat.zeile to Quadrat.zeile + 9 - 1 do
    for s := Quadrat.spalte to Quadrat.spalte + 9 - 1 do
    begin
      if ((z MOd 3) = (zeile MOD 3)) AND ((s MOD 3) = (spalte MOD 3))
      then Basiszahlen[s,z].IsPossible := false;
    end;
  Basiszahlen[spalte,zeile].IsChecked := true;
  Basiszahlen[spalte,zeile].IsPossible := true;
// ==> MessageBox.Show(spalte.ToString+'/'+zeile.ToString);
// ==> Text := spalte.ToString+'/'+zeile.ToString;
  // Spiel aktualisieren
  for s := 1 to 28 - 1 do
    for z := 1 to 28 - 1 do
    begin
      if not Basiszahlen[z,s].IsPossible then
      begin
      Spiel[z,s].Font :=
          System.Drawing.Font.Create('Arial', 9,
          System.Drawing.FontStyle.Regular,
          System.Drawing.GraphicsUnit.Point, (Byte(0)));
      Spiel[z,s].Enabled := false;
      end;
      if Basiszahlen[z,s].IsChecked then
      begin
        Spiel[s,z].Enabled := true;
        Spiel[s,z].Height := 77;
        Spiel[s,z].Width := 77;
        Spiel[s,z].Left := Spiel[zahl.spalte,zahl.zeile].Left;
        Spiel[s,z].Top := Spiel[zahl.spalte,zahl.zeile].Top;
      Spiel[s,z].Font :=
          System.Drawing.Font.Create('Arial', 12,
          System.Drawing.FontStyle.Bold,
          System.Drawing.GraphicsUnit.Point, (Byte(0)));
      Spiel[s,z].BringToFront;
      end;
    end;

end;
Führe ich an der Stelle //==>

1. "MessageBox.Show(spalte.ToString+'/'+zeile.ToString)" aus, werden die folgenden Anweisungen nicht mehr ausgeführt

2. "Text := spalte.ToString+'/'+zeile.ToString" aus, läuft alles problemlos weiter.

Ich hoffe, jemand von Euch kann mir erklären, was da passiert?!

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem mit MessageBox.Show

  Alt 16. Jun 2006, 04:50
Guten Morgen.

Leider habe ich für mein Problem noch keine Lösung gefunden und scheinbar ist von Euch noch niemand damit konfrontiert worden. Ich habe schon versucht, in einem einfacheren Projekt das Problem zu reproduzieren - ist mir aber nicht gelungen.

Im o.a. Quelltext habe ich versuchsweise MessageBox.Show weiter oben aufgerufen und dann vor den for-Schleifen eine Kontrollanweisung (z.B. BackColor := System.Drawing.Color.Red) eingefügt. Dadurch konnte ich feststellen, dass offensichtlich alle Anweisung bis zu den for-Schleifen ausgeführt werden und schließe daraus, dass es eigentlich nicht am Quelltext liegen kann.

Gleichzeitig habe ich festgestellt, dass nach dem Klick auf OK die MessageBox zwar sofort verschwindet, es aber ungewöhnlich lange dauert, bis die darunter liegenden Komponenten wieder neu gezeichnet sind.

Nachdem ich nun alleine nicht mehr weiterkomme, wäre ich dankbar, wenn sich eine/r unserer Spezialisten meines Problems annehmen könnte.

Vielen Dank und noch einen schönen Tag.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 16:09
Hallo, Allerseits.

Da bin ich wieder mit meinem - noch immer nicht gelösten - Problem. Ich habe jetzt einmal ein kurzes (relativ sinnfreies) Testprojekt geschrieben, bei dem der gekennzeichnete Block nach "MesseageBox.Show('TEST!'); " nicht ausgeführt wird. Klammert man diese Anweisung aus, dann funktioniert's wieder:

Delphi-Quellcode:
unit uMessageTest;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data;

type
  frmMessageTest = class(System.Windows.Forms.Form)
  {$REGION 'Vom Designer verwalteter Code'}
  strict private
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    Components: System.ComponentModel.Container;
    Dummy: System.Windows.Forms.Label;
    /// <summary>
    /// Erforderliche Methode zur Unterstützung des Designers -
    /// ändern Sie die Methode nicht mit dem Quelltext-Editor
    /// </summary>
    procedure InitializeComponent;
    procedure frmMessageTest_Activated(sender: System.Object; e: System.EventArgs);
    procedure Dummy_Click(sender: System.Object; e: System.EventArgs);
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Ressourcen nach der Verwendung bereinigen
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
  private
    { Private-Deklarationen }
  public
    constructor Create;
  end;

  TMyLabel = System.Windows.Forms.&Label;

var
  MyLabel : TMyLabel;
  LabelArray : array[1..5,1..6] of TMyLabel;

  [assembly: RuntimeRequiredAttribute(TypeOf(frmMessageTest))]

implementation

{$AUTOBOX ON}

{$REGION 'Vom Windows Form-Designer erzeugter Code'}
/// <summary>
/// Erforderliche Methode zur Unterstützung des Designers --
/// ändern Sie die Methode nicht mit dem Quelltext-Editor
/// </summary>
procedure frmMessageTest.InitializeComponent;
begin
  Self.Dummy := System.Windows.Forms.Label.Create;
  Self.SuspendLayout;
  //
  // Dummy
  //
  Self.Dummy.Location := System.Drawing.Point.Create(24, 24);
  Self.Dummy.Name := 'Dummy';
  Self.Dummy.TabIndex := 0;
  Self.Dummy.Text := 'Dummy';
  Self.Dummy.Visible := False;
  Include(Self.Dummy.Click, Self.Dummy_Click);
  //
  // frmMessageTest
  //
  Self.AutoScaleBaseSize := System.Drawing.Size.Create(6, 15);
  Self.ClientSize := System.Drawing.Size.Create(688, 568);
  Self.Controls.Add(Self.Dummy);
  Self.Name := 'frmMessageTest';
  Self.Text := 'MessageTest';
  Include(Self.Activated, Self.frmMessageTest_Activated);
  Self.ResumeLayout(False);
end;
{$ENDREGION}

procedure frmMessageTest.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

constructor frmMessageTest.Create;
begin
  inherited Create;
  //
  // Erforderlich für die Unterstützung des Windows Forms-Designers
  //
  InitializeComponent;
  //
  // TODO: Fügen Sie nach dem Aufruf von InitializeComponent Konstruktorcode hinzu.
  //
end;

procedure frmMessageTest.Dummy_Click(sender: System.Object; e: System.EventArgs);
var
  i,j : integer;
begin
  if Sender is &Label
    then (Sender as &Label).BackColor := System.Drawing.Color.Red;

////////////////////////////////////////////////////////////////////////////
// Hier passiert's: nach

MessageBox.Show('TEST!');

// wird das nicht mehr ausgeführt:

  for i := 1 to 5 do
    for j := 1 to 6 do
    if (i = 3) AND (j = 3) then LabelArray[i,j].Text := 'OK';

// und das wird wieder ausgeführt:

  Self.BackColor := System.Drawing.Color.LightBlue;
    

end;

procedure frmMessageTest.frmMessageTest_Activated(sender: System.Object;
          e: System.EventArgs);
var
  i,j,n : integer;
begin
  n := 0;
  for i := 1 to 5 do
    for j := 1 to 6 do
    begin
      inc(n);
      MyLabel := System.Windows.Forms.&Label.Create;
      With MyLabel do
      begin
        Height := 30;
        Width := 30;
        Left := 10 + i*40;
        Top := 10 + j*40;
        Text := n.ToString;
        BackColor := System.Drawing.Color.White;
      end;
      Self.Controls.Add(MyLabel);
      LabelArray[i,j] := MyLabel;
      Include(LabelArray[i,j].Click, Self.Dummy_Click);
    end;
end;

end.
Auf dem Formular liegt nur ein unsichtbares Label namens "Dummy".

Es wäre schön, wenn das einmal jemand von Euch ausprobieren könnte - vielleicht tritt der Fehler ja nur bei mir auf. Auf alle Fälle ist das ganze höchst mysteriös.

Vielen Dank im Voraus an alle, die sich damit beschäftigen möchten.

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 16:32
ist das MessageBox ein Formular von Dir?
Falls nein, dann lass mal das Show weg und schreibe nur MessageBox(.....).
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 16:38
@ RavenIV

Geht nicht! - Kommt eine Fehlermeldung: ungültige Typumwandlung.

Mir geht das ganze ziemlich auf die Nerven, weil ich relativ oft eine MessageBox verwende, um meine Projekte zu testen.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 16:45
also ich verwende MessageBox so und habe nie Probleme:
Application.MessageBox ('Bei Logbucheintrag trat ein Fehler auf','Fehler', MB_ICONEXCLAMATION OR MB_OK);
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 17:02
@ RavenIV

Ich verwende es ja auch laufend ohne Probleme. Es werden ja auch die Anweisungen nach dem gekennzeichneten Block ausgeführt - nur die Anweisung

Delphi-Quellcode:
  for i := 1 to 5 do
    for j := 1 to 6 do
    if (i = 3) AND (j = 3) then LabelArray[i,j].Text := 'OK';
nicht. Und wenn ich den Aufruf der MessageBox auskommentiere, dann klappt's wieder.

Gruß Jürgen.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 17:13
Zitat von RavenIV:
also ich verwende MessageBox so und habe nie Probleme:
Application.MessageBox ('Bei Logbucheintrag trat ein Fehler auf','Fehler', MB_ICONEXCLAMATION OR MB_OK);
@RavenIV
Da hast Du bestimmt was verwechselt. Hier geht es Winforms und da hat das Objekt Application keine entsprechende Funktion.

@Jürgen
Habe Deinen Sourcecode getestet und die von Dir beschriebene Stelle wird ausgeführt, auch wenn vorher die Messagebox aufgerufen wird. Aber verfahre getreu nach Deinem Motto: Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Problem mit MessageBox.Show

  Alt 27. Jun 2006, 18:00
@ Heffalump

Vielen Dank, dass Du Dir die Mühe gemacht hast, das auszuprobieren. Leider gefällt mir Deine Antwort gar nicht! Mir wäre es viel lieber gewesen, Du hättest einen Fehler in meinem Quelltext gefunden. Jetzt bin ich genau so schlau wie vorher. Warum klappt's bei Dir und bei mir nicht?

Aber trotzdem vielen Dank und noch einen schönen Abend.

Gruß Jürgen

PS.

Jetzt hab ich zu dem Ganzen noch eine TextBox hinzu gefügt, die mir die Werte von i und j anzeigt: Die Schleife wird durchlaufen, jedoch wird

if (i = 3) AND (j = 3) then LabelArray[i,j].Text := 'OK'; nicht ausgeführt.
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: Problem mit MessageBox.Show

  Alt 28. Jun 2006, 10:12
@Jürgen

Ich habe das Problem gefunden . Du benutzt zum Erstellen der Labels das Ereignis "Activated". Rufst Du nun die MessageBox auf und schließt diese wieder, dann wird das Ereignis neu ausgelöst und alle Labels werden neu erzeugt und zwar nach dem die Funktion "Dummy_Click" ausgeführt wurde. Deine Funktion läuft korrekt. Benutze zum Erstellen das Ereignis "Load" und dann klappt es auch.
  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 19:50 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