Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)' (https://www.delphipraxis.net/61892-ich-hab-ein-brett-vor-dem-kopf-oder-inc-var.html)

-lx- 27. Jan 2006 16:45


'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Hallo.

Entschuldigung bitte für den etwas komischen Titel abe rmir ist nicht wirklich etwas sinnvolles eingefallen, da mein Gefühl für Sinn bereits verloren gegenagen ist - zumindest bei dme Problem was ich euch nun schildere.

Also es geht darum. Man drückt auf eine Button. Darauf wird in ein Memofeld ein Zusätzliches STück Text gehängt und die Beschriftung des Buttons wird geändert. Wenn man nun wieder auf den gleichen Button klickt, wird wiederum ein Stück Text in das MemoFeld geschriben und die Beschriftugn des Textes wieder in den Urzustand zurckversetzt.
ich bekomm e sjedoch nicht gebacken, dass es funktioniert. Warscheinlich ein blöder Fehler und ich werde im Nachhinein sagen "U're a such a fool" ;)

nun gut... hier ist der Quelltext:


Delphi-Quellcode:
procedure TForm1.SBbClick(Sender: TObject);
var VFett :Integer ;
begin
inc(VFett);
If VFett = 1 Then
 begin
   MText.Text:= MText.Text + ' [b] ' ;
   SBb.Caption:= '[/b]' ;
 end
Else If VFett = 2 Then
 begin
   MText.Text:= MText.Text + ' [/b] ' ;
   SBb.Caption:='[b]' ;
 end;
end;

end.



Mit freundlichen Grüßen

Neotracer64 27. Jan 2006 16:50

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inv(var)'
 
Leider ist VFett am Anfang nicht 0, sondern gänzlich undefiniert. Du musst VFett einen konkreten Wert zuweisen.
Der Compiler müsste auch eine Warnung ala "Variable X might not have been initialized" anzeigen.

ManuMF 27. Jan 2006 16:51

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inv(var)'
 
Hmmm, ich würde da eher ein Boolean nehmen:

Delphi-Quellcode:
var VFett: Boolean = false;
// Global, sonst "merkt sich" Delphi den Wert nicht ;-)

procedure TForm1.SBbClick(Sender: TObject);
begin
VFett := not VFett;

If VFett Then
 begin
   MText.Text:= MText.Text + ' [b] ' ;
   SBb.Caption:= '[/b]' ;
 end
else
 begin
   MText.Text:= MText.Text + ' [/b] ' ;
   SBb.Caption:='[b]' ;
 end;
end;

end.
Gruß,
ManuMF

tomsel 27. Jan 2006 16:56

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inv(var)'
 
Das ist doch ganz einfach: Du hast eine lokale Variable VFett in deiner Prozedur. Die hat zu Beginn irgendeinen zufälligen Wert, auf den du 1 addierst (also Zufall + 1, he, he). Manchmal ist das sogar 1 oder 2, meistens aber was anderes.

Deklariere in TForm1 eine private Variable VFett:boolean und initialisiere die in FormCreate mit FALSE.

Die Prozedur so abändern:
Delphi-Quellcode:
procedure TForm1.SBbClick(Sender: TObject);
begin
If not VFett Then
begin
   MText.Text:= MText.Text + ' [b] ' ;
   SBb.Caption:= '[/b]' ;
end
Else
begin
   MText.Text:= MText.Text + ' [/b] ' ;
   SBb.Caption:='[b]' ;
end;
VFett := not VFett
end;
--------------------------------
jaja, zu langsam

-lx- 27. Jan 2006 17:00

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Oha... mit so ne schnellen Antworten habe ich garnicht gerechnet! ;)

Jaa da kommt durchaus die Meldung "...konnt enicht initialisiert werden." aber ich wusste nicht was er damit meinte.


Was meinst du mit der Stelle:

Delphi-Quellcode:
VFett := not VFett;
und
Delphi-Quellcode:
If VFett Then
???

Bei der IF Abfrage wir ddoch nichts verglichen... !?

Könntets du mir die Stellen erläutern ?




mfg
CYa


/€dit: Ich habe das jetzt so geöst, dass ich die Var VFett als globale Variable mit dem Wert 0 deklariert habe.

Delphi-Quellcode:
procedure TForm1.SBbClick(Sender: TObject);
begin
inc(VFett);
If VFett = 1 Then
 begin
   MText.Text:= MText.Text + ' [b] ' ;
   SBb.Caption:= '[/b]' ;
 end
Else If VFett = 2 Then
 begin
   MText.Text:= MText.Text + ' [/b] ' ;
   SBb.Caption:='[b]' ;
   VFett:= 0 ;
 end;
end;

end.

Globale Var:
Delphi-Quellcode:
var
  Form1: TForm1;
  Satz: String;
  VFett: Integer = 0 ;

So nun abe rnoch eine Frage: Wie stelle ich es an, dass der Curser im Memofeld immer am Textende platziert wird ?



@ tomsel

mit
Delphi-Quellcode:
 VFett:= Vfett + 1 ;
habe ich e sja versucht aber es ging komischer weise nicht ....

tomsel 27. Jan 2006 17:11

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Zitat:

@ tomsel

mit
Delphi-Quellcode: markieren
VFett:= Vfett + 1 ;

habe ich e sja versucht aber es ging komischer weise nicht ....
Missverständnis! Im ersten Absatz meines Postings habe ich lediglich deinen Fehler beschrieben, ich meinte nicht, dass du inc(vfett) mit fvett:=vfett+1 ersetzen sollst.

-lx- 27. Jan 2006 17:18

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Oh ok.

Naja es geht nun.


Aber hab imme rnoch ein Problem.

Wie kann ich denn an der Stelle des Cursors, also da wo er blinkt, z.B. Texte i ein Memofeld einfügen ?

Bzw. wie schaffe iche , dass der Cursor imme rzum Ende eines Textes springt, wenn man einem Memofeld eine neuen Text zufügt?






mfg
Cya

ManuMF 27. Jan 2006 17:20

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Also, mit "If Boolean" wird abgefragt, ob der Boolean = true ist. "If Boolean = true" kann jedoch zu Fehlern führen (siehe Tutorial).

Genauso kann dem Boolean das Gegenteil seines Zustandes zugewiesen werden: "Boolean := not Boolean".

Gruß,
ManuMF

tomsel 27. Jan 2006 19:25

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Zitat:

Was meinst du mit der Stelle:

Delphi-Quellcode: markieren
VFett := not VFett;


und
Delphi-Quellcode: markieren
If VFett Then

???

Bei der IF Abfrage wir ddoch nichts verglichen... !?

Könntets du mir die Stellen erläutern ?
Sorry, diese Fragen hab ich ganz übersehen, aber dank ManuMF ist jetzt wohl alles klar? VFett ist ja vom Typ boolean und damit für sich allein ein vollständiger boolescher Ausdruck, da brauchts' keinen Vergleich mehr. Und NOT macht TRUE zu FALSE und umgekehrt, VFett wird also negiert.

tomsel 27. Jan 2006 19:28

Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
 
Ach ja, der text im Memo: Ich nehm für solche zwecke lieber ein Richedit. Da hat man bessere Manipulationsmöglichkeiten. Mit SelStart, SelEnd, Selection.Collapse und Selection.Text etc. müsstest du eigentlich dein Ziel erreichen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Seite 1 von 2  1 2      

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