AGB  ·  Datenschutz  ·  Impressum  







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

Form lässt sich mit show nicht öffnen

Ein Thema von MrFish · begonnen am 16. Nov 2004 · letzter Beitrag vom 17. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
MrFish

Registriert seit: 16. Jul 2003
50 Beiträge
 
Delphi 7 Personal
 
#1

Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 12:39
Ich schreibe eine Anwendung bei der von der Haupt Form aus mehrere Forms mit show angezeigt werden.
Auf einmal funktioniert das mit mit einer Form nicht mehr. Es kommt keine Fehlermeldung, sondern es passiert garnichts. Ich kann mir nicht erklären warum, da mir nicht bewusst ist etwas in dem Bereich geändert zu haben.
Ich habe die Eigenschaften verglichen, ich habe die Form aus dem Projekt entfernt, und neu eingefügt, ich habe die Uses Klausel geprüft. Alle ohne Befund. Woran kann es noch liegen?

Gruß MrFish
Es gibt zwei unbestreitbare Tatsachen: 1. Ich irre mich nie. 2. Die Welt ist eine Scheibe.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 12:41
Sthet die Visible-Eigenschaft der Form eventuell auf False?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 12:43
Zitat von Luckie:
Sthet die Visible-Eigenschaft der Form eventuell auf False?
Ich darf Luckie korrigieren... In der OH steht dass Show die Visible-Eigenschaft auf True setzt.

@MrFish: Wird das OnShow-Ereignis denn ausgeführt? Werden die Koordinaten des Form (Left und Top) auf Werte gesetzt, die außerhalb des sichtbaren Bereiches stehn?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
MrFish

Registriert seit: 16. Jul 2003
50 Beiträge
 
Delphi 7 Personal
 
#4

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 13:00
Zitat:
Werden die Koordinaten des Form (Left und Top) auf Werte gesetzt, die außerhalb des sichtbaren Bereiches stehn?
Nein, hab ich auch schon geprüft, ausserdem steht WindowsState auf WsMaximized.
Es gibt zwei unbestreitbare Tatsachen: 1. Ich irre mich nie. 2. Die Welt ist eine Scheibe.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 13:09
Hi!

Passiert es immer mit der gleichen Form? Wird im OnShow dieser Form evtl. igendwelcher Code ausgeführt, der die Form wieder unsichtbar macht?
Dani H.
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#6

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 13:11
Kannst du etwas Code posten wie du die Form öffnest und was im OnShow steht?
Mfg MrScholz
  Mit Zitat antworten Zitat
MrFish

Registriert seit: 16. Jul 2003
50 Beiträge
 
Delphi 7 Personal
 
#7

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 13:21
Das ist der komplette Code der fraglichen Form:
Code:
unit Unit8;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TVorlage = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Button9Click(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Vorlage: TVorlage;

implementation

{$R *.dfm}

procedure TVorlage.FormCreate(Sender: TObject);
var
  Default: TStringList;
  i     : Integer;
  j     : Integer;
  pos   : Integer;
begin

//----------------------------------------------------------------------------
//----------- Saltenköpf schreiben -------------------------------------------
//----------------------------------------------------------------------------

 StringGrid1.Cells [0,0] := 'von';
 StringGrid1.Cells [1,0] := 'bis';
 StringGrid1.Cells [2,0] := 'von';
 StringGrid1.Cells [3,0] := 'bis';
 StringGrid1.Cells [4,0] := 'von';
 StringGrid1.Cells [5,0] := 'bis';
 StringGrid1.Cells [6,0] := 'von';
 StringGrid1.Cells [7,0] := 'bis';
 StringGrid1.Cells [8,0] := 'von';
 StringGrid1.Cells [9,0] := 'bis';
 StringGrid1.Cells [10,0] := 'von';
 StringGrid1.Cells [11,0] := 'bis';

//----------------------------------------------------------------------------
//-------- Vorlagen laden ---------------------------------------------------
//---------------------------------------------------------------------------

Default := TStringList.create;
Default.LoadFromFile('c:/delphi/default.txt');

Pos := 0;
For j := 1 to 20 do
begin
  For i := 0 to 11 do
  begin
    StringGrid1.Cells[i,j] := default[pos];
    Pos := Pos + 1;
  end;
end;
Default.Destroy;
end;

procedure TVorlage.Button8Click(Sender: TObject);
var
  i : integer;
  j : integer;
  Default : TStringlist;
begin
  Default := TStringlist.Create;

//---------------------------------------------------------------------------
//-------- Vorlage abspeichern ----------------------------------------------
//---------------------------------------------------------------------------

  For j := 1 to 20 do
    begin
      for i := 0 to 11 do
      default.Add(StringGrid1.Cells[i,j]);
    end;
    Default.SaveToFile('C:/delphi/default.txt');
    Default.Destroy;
    Vorlage.Hide;
end;

procedure TVorlage.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//--------------------------------------------------------------------------
//-------Tabelle nach Wochentagen unterteilen ------------------------------
//--------------------------------------------------------------------------

 begin
if Acol = 2 then
   begin
   StringGrid1.Canvas.Pen.Color:=clblack;
   StringGrid1.Canvas.Pen.Width:=1;
   StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
   StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
   end;

if Acol = 4 then
   begin
   StringGrid1.Canvas.Pen.Color:=clblack;
   StringGrid1.Canvas.Pen.Width:=1;
   StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
   StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
   end;

if Acol = 6 then
   begin
   StringGrid1.Canvas.Pen.Color:=clblack;
   StringGrid1.Canvas.Pen.Width:=1;
   StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
   StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
   end;

if Acol = 8 then
   begin
   StringGrid1.Canvas.Pen.Color:=clblack;
   StringGrid1.Canvas.Pen.Width:=1;
   StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
   StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
   end;

if Acol = 10 then
   begin
   StringGrid1.Canvas.Pen.Color:=clblack;
   StringGrid1.Canvas.Pen.Width:=1;
   StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
   StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
   end;

if Acol = 12 then
   begin
   StringGrid1.Canvas.Pen.Color:=clblack;
   StringGrid1.Canvas.Pen.Width:=1;
   StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
   StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
   end;

end;

end;

procedure TVorlage.Button9Click(Sender: TObject);
begin
  Vorlage.Hide;
end;

procedure TVorlage.StringGrid1Click(Sender: TObject);
begin

end;

end.
und hier der Aufruf:

procedure TWochenplan.VorlageClick(Sender: TObject);
begin
Vorlage.show;
end;
Es gibt zwei unbestreitbare Tatsachen: 1. Ich irre mich nie. 2. Die Welt ist eine Scheibe.
  Mit Zitat antworten Zitat
Dummy

Registriert seit: 15. Nov 2004
18 Beiträge
 
#8

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 13:40
Hallo MrFish,

ich würde zuerst mal das Default.Destroy gegen Default.Free ersetzen.
Tritt das Problem bei Button9 wie auch bei Button8 auf?
Manchmal kann es hilfreich sein wenn man Windows etwas Zeit gönnt Nachrichten zu verarbeiten. Bei dem Hide von Button8 würde ich versuchsweise vor dem Hide mal ein "Application.ProcessMessages" einfügen. Glaube zwar nicht daran das das der Fehler ist, aber es sieht so aus als würden Windows ein paar Messages nicht verarbeiten können.

Hoffe es hilft
Dummy
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 14:02
folgender Programmcode zeigt einen häufigen Anfängerfehler:
Delphi-Quellcode:
procedure TVorlage.Button9Click(Sender: TObject);
begin
  Vorlage.Hide; // FALSCH !!!!!
//^^^^^^^
end;
Wenn du ein Formularklasse (hier: TVorlage) hast, darfst du nicht innerhalb der Klasse auf ein bestimmtes
Objekt dieser Klasse zugreifen (hier: var Vorlage:TVorlage)!!!
Stattdessen musst du den versteckten Parameter Self verwenden:
Delphi-Quellcode:
procedure TVorlage.Button9Click(Sender: TObject);
begin
  self.Hide; // richtig
  // man kann self auch ganz weglassen
  Hide;
end;
Grund:
Wenn jemand ein Formular der Klasse TVorlage erzeugt, muss er dieses Formular ja nicht zwingend in der Variablen
Vorlage speichern.
Dadurch können sehr seltsame Fehler und Zugriffsverletzungen auftreten.
Diese Grundregel gilt für alle Klassen, nicht nur für Formulare. Die Regel gilt auch für alle objektorientierten
Programmiersprachen (nicht nur für Delphi).
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Form lässt sich mit show nicht öffnen

  Alt 16. Nov 2004, 14:10
Hai MrFish,

mal ganz am Rande. Warum hast Du denn so viele IF-Abfragen in deinem OnDrawCell? Es wird doch immer das selbe gemacht.
So müsste es doch auch gehen.

Code:
unit Unit8;
.
.
procedure TVorlage.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
//--------------------------------------------------------------------------
//-------Tabelle nach Wochentagen unterteilen ------------------------------
//--------------------------------------------------------------------------
  if (Acol IN [2,4,6,8,10,12]) then
    begin
      StringGrid1.Canvas.Pen.Color:=clblack;
      StringGrid1.Canvas.Pen.Width:=1;
      StringGrid1.Canvas.moveto(Rect.Left,Rect.Top);
      StringGrid1.Canvas.Lineto(Rect.Left,Rect.Bottom);
    end;
end;
.
.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  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 10:09 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