Autor Beitrag
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.02.05 14:07 
Hoi.

Weil mir MessageBox, showMessage, MessageDlg, InputDialog oder wie sie alle heißen nicht genügen, will ich in meinem Programm eine eigene machen, und das auf einem neuen Formular. Dazu will ich die einzelnen Elemente initialisieren, aber irgendwas klappt hierbei nicht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Procedure TForm6.initButton(but: TButton; proc: TNotifyEvent; x,y,w,h: Integer; showing: Boolean; capt: String);
Begin
  With but Do
    Begin
      Left    := x;       // x-Koordinate
      Top     := y;       // y-Koordinate
      Width   := w;       // Brite
      Height  := h;       // Höhe
      Visible := showing; // sichtbar?
      Caption := capt;    // Beschriftung
      OnClick := proc;    // OnClick-Ereignis
    End;
End;


so initialisiert:

ausblenden Delphi-Quelltext
1:
Form6.initButton(Form6.Button3,Form6.returnCANCEL,112,144,97,21,True,'Ok');					


und ich seh nicht den Button. Alle anderen Komponenten, die über entsprechende Prozeduren initialisiert werden sollen genausowenig.

Woran liegts?
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Mo 21.02.05 14:20 
Du must noch die Variable "Parent" auf das Formular setzen in dem der Button angezeigt werden soll.

ausblenden Quelltext
1:
But.Parent := Formular1					


Den Parent muss man bei fast allen sichtabren Komponenten setzen (soweit ich weiss).
Bei Buttons und Panels aber auf jeden Fall ;)

mfg


P.S.: Aber ich erkenne in deinem Code nichts, was du nicht einfach mit einem ganz normal auf das Formular gezogenen Button auch machen könntest. Sonst müsstest du ja auch von der TButton Klasse eine neue Klasse ableiten.

_________________
Result := 42; Application.ProcessMessages;
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.02.05 14:36 
Die Buttons der Form werden nicht zur Laufzeit erstellt, sondern sind schon auf der Form, von daher hat es nichts genützt, diese Zeile einzufügen..
Wizard of OS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win95, Win98, Win2000, WinNT, Win XP
D5
BeitragVerfasst: Mo 21.02.05 17:59 
Hallo OneOfTen,

Wann genau führst Du eigentlich diese Initialisierungen aus?

Ist der Container des Buttons das Form selbst oder evtl. ein Panel etc. ?
Dann könnte es sein, dass die Koordinaten die Du übergibst zwar bezogen aufs Form
stimmen würden, aber wenn der Button im Panel liegt wird er in einen unsichtbaren
Bereich verschoben ...

Kleiner Tip am Rande:

Verwende statt Left, Top, Width und Heigt seperat zu setzen besser die Funktion

SetBounds, denn dann wird alles in einem Rutsch erledigt, führt zu einem ruhigeren
Bildaufbau.

ausblenden Delphi-Quelltext
1:
   but.SetBounds(left,top,width,height);					
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.02.05 18:10 
Nein, kein Panel o.ä., die Koordinaten stimmen.

Die Initialisierung steht direkt vor dem Form.Show Ereignis..

SetBounds hört sich gut an, aber sehen tu ich immer noch nichts...
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mo 21.02.05 18:22 
Hab den Fehler zwar gefunden, zerbreche mir aber gerade den Kopf darüber was passiert ist :gruebel:

Die visible Zeile wird übergangen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Procedure TForm1.initButton(but: TButton;  x,y,w,h: Integer; showing: Boolean; capt: String);
Begin
showmessage(booltostr(showing));  //gibt true aus, also noch alles okay
  With but Do
    Begin
      Left    := x;      
      Top     := y;      
      Width   := w;      
      Height  := h;       
      Caption := capt;    
      Visible := showing; // müsste But ja jetzt auf true setzten
showmessage(booltostr(visible)); // gibt komischerweise false aus....
      visible := true; //und nun wird der Button sichtbar
    End;
End;



Sehr sehr intressantes Phänomen :)
Ich häng mich mal dran.

edit
Der Fehler liegt im With Do Block.

Man nehme nicht ganz so eindeutige namen :mrgreen:
Showing ist eine Proberty des TButtons....Brett vorm kopf gehabt.

Du musst den namen der Showing variable ändern.


Zuletzt bearbeitet von Karlson am Mo 21.02.05 18:28, insgesamt 1-mal bearbeitet
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.02.05 18:27 
Bin schon gespannt auf dein Ergebnis, ich komm so spontan auf keine Lösung :gruebel:
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mo 21.02.05 18:30 
ich pusch den mal hoch damit oneoften wieder reinschaut, ich hab nämlich genau eine minute nach dir editiert ;)
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.02.05 18:49 
hab ich wohl unglücklich gewählt :wink:
Wizard of OS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win95, Win98, Win2000, WinNT, Win XP
D5
BeitragVerfasst: Mo 21.02.05 20:21 
Hallo OneOfTen,

ein teuflischer Fehler, ein Bekannter hatte mal durch so eine Sache auf einem Quickreport-Ausdruck den Namen des Forms statt den Namen des Kunden stehen :)

Ich würde Dir für Variablen-Namen die Verwendung eines Präfix empfehlen, entweder denkst Du Dir selbst welche aus oder greifst auf bewährte Konventionen (z.B. die ungarische Notation) zurück. Dann bist Du immer auf der sicheren Seite und der Name der Variable sagt auch gleich etwas über deren Typ aus.

Beipiel:

btn - Buttons btnDruck
lst - Listen lstAuswahl
cmb - Combos cmbAuswahl
i - integer iZaehler
b - boolean bSichtbar
arr - array arrFigur

etc.

Moderiert von user profile iconTino: Überflüssige Absätze entfernt.
Wizard of OS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win95, Win98, Win2000, WinNT, Win XP
D5
BeitragVerfasst: Mo 21.02.05 20:25 
Frage an Admin:
Editieren kann ich einen Eintrag, aber wie kann ich einen
Post wieder löschen?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 21.02.05 20:30 
Wizard of OS hat folgendes geschrieben:
Frage an Admin:
Editieren kann ich einen Eintrag, aber wie kann ich einen
Post wieder löschen?

Gar nicht. Wenn Du das willst, benachrichtige einfach einen Admin oder Mod