| Autor |
Beitrag |
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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:
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; Top := y; Width := w; Height := h; Visible := showing; Caption := capt; OnClick := proc; End; End; |
so initialisiert:
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
      
Beiträge: 82
Win 2k / suse9.1
D7 Prof / Kylix 3
|
Verfasst: Mo 21.02.05 14:20
Du must noch die Variable "Parent" auf das Formular setzen in dem der Button angezeigt werden soll.
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
|
Verfasst: 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
      
Beiträge: 19
Win95, Win98, Win2000, WinNT, Win XP
D5
|
Verfasst: 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.
Delphi-Quelltext 1:
| but.SetBounds(left,top,width,height); |
|
|
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 2088
|
Verfasst: Mo 21.02.05 18:22
Hab den Fehler zwar gefunden, zerbreche mir aber gerade den Kopf darüber was passiert ist
Die visible Zeile wird übergangen.
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)); With but Do Begin Left := x; Top := y; Width := w; Height := h; Caption := capt; Visible := showing; showmessage(booltostr(visible)); visible := true; 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
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
|
Verfasst: Mo 21.02.05 18:27
Bin schon gespannt auf dein Ergebnis, ich komm so spontan auf keine Lösung 
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: 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
|
Verfasst: Mo 21.02.05 18:49
hab ich wohl unglücklich gewählt 
|
|
Wizard of OS
      
Beiträge: 19
Win95, Win98, Win2000, WinNT, Win XP
D5
|
Verfasst: 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 Tino: Überflüssige Absätze entfernt.
|
|
Wizard of OS
      
Beiträge: 19
Win95, Win98, Win2000, WinNT, Win XP
D5
|
Verfasst: Mo 21.02.05 20:25
Frage an Admin:
Editieren kann ich einen Eintrag, aber wie kann ich einen
Post wieder löschen?
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: 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
|
|