Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 03:28 
- Nachträglich durch die Entwickler-Ecke gelöscht -
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 24.12.08 04:59 
ausblenden Delphi-Quelltext
1:
MessageBox(0'Deine Eingabe war: ' + PChar(IntToStr(Eing)) + #10#13 'Es sind aber nur Zahlen von x-y erlaubt''Fehler', MB_OK xor MB_ICONERROR);					

Die MessageBox möchte als Parameter einen PChar, was im Prinzip das gleiche wie ein String ist. Ein einfacher Typecast wandelt den von IntToStr zurückgegebenen String in einen PChar um, siehe oben. Ausserdem verknüpft man Flags generell mit xor, nicht mit +! Achtung, das mit + funktioniert nur in den seltensten Fällen durch Zufall! (Ich bin mir nicht ganz sicher, ob xor oder or die Regel ist. )

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 05:20 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.ShowMessage(txt, Caption: string; thehandle: HWND);
begin
  Windows.MessageBox(thehandle,PChar(txt),PChar(Caption),MB_OK+MB_ICONerror)
end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
    ShowMessage('Dein Text','Fehler', Handle);
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 24.12.08 05:34 
Es gibt da ja auch Application.MessageBox, das kapselt ohnehin schon Windows.MessageBox, da muss man das Rad gar nicht neu erfinden.
Und ShowMessage würde ich eine eigene Prozedur jetzt nicht gerade nennen, schließlich gibts das schon. ;-)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 07:00 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 07:19 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 10:43 
Bei JayEff muss die Klammer natürlich um den ganzen Parameter. Und das Verknüpfen der Flags mit xor ist falsch. Sie müssen mit or verknüpft werden. Dass es auch mit einem Plus geht, ist reiner Zufall, weil die Werte der Konstanten zufällig so gewählt wurden, dass es funktioniert.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 24.12.08 11:25 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
@ jaenicke

Application.MessageBox habe ich ja auch versucht jedoch kommt's aufs selbe hinaus, ist nur etwas anders geschrieben.

DAS TYPEN-PROBLEM MIT 'String' und 'PAnsiChar' BESTEHT NOCH IMMER !!
ausblenden Delphi-Quelltext
1:
2:
  Application.MessageBox(PChar('Deine Eingabe war: ' + IntToStr(Eing) + #10#13
    + 'Es sind aber nur Zahlen von x-y erlaubt')'Fehler' , MB_OK or MB_ICONERROR);
;-)
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Mi 24.12.08 11:47 
Frohe Weihnachten jaenicke,

fehlt da nicht ein ) hinter Inttostr(Eing) ?

Bis bald Chemiker
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 24.12.08 12:09 
Ebenfalls frohe Weihnachten :D

nein, das fehlt nicht, schau mal etwas weiter hinten vor der Klammer ;-). Da ich das ganze als ein PChar übergeben muss ist es logischer es am Ende des Parameters zu setzen. Und ich hatte es ja sogar gehighlightet :D.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Mi 24.12.08 12:17 
Frohe Weihnachten jaenicke,

hatte wohl Weihnachtsbäume auf den Augen. Sorry!

Bis bald Chemiker
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 24.12.08 16:45 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Bei JayEff muss die Klammer natürlich um den ganzen Parameter.
:oops:

user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
(Ich bin mir nicht ganz sicher, ob xor oder or die Regel ist.)
Gut, dass du das klar gestellt hast. Nun weiß ich's auch - hätte ich mir aber auch denken können :roll: xor macht spätestens ab 3 Flags schon logisch keinen Sinn mehr - auch wenn's schon mit 2 Flags probleme machen kann.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 22:47 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 24.12.08 22:59 
Eine neue Frage gehört in einen neuen Thread! Für weitere Fragen also bitte einen aufmachen!

Ich glaube dir ist nicht so ganz klar, was du eigentlich genau machst.
Denn: MessageBox zeigt zwar eine Meldung an, aber mehr auch nicht. Val gibt dir zurück, ob die Umwandlung erfolgreich war. Und den Wert musst du benutzen.
Denn nur wenn Val True zurückgegeben hat, die Umwandlung also erfolgreich war, darf überhaupt die Berechnung durchgeführt werden.

Zudem ist dein Code nicht besonders übersichtlich:
with würde ich so wenig wie nur möglich benutzen, du handelst dir dadurch manchmal schwer zu findende Fehler ein, gerade wenn du dich noch nicht so gut auskennst und mit Fehlermeldungen nicht so viel anfangen kannst.
Und globale Variablen machen den Code auch unübersichtlich.

So ungefähr müsste es eigentlich gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm2.Button1Click(Sender: TObject); //hier wird meine Berechnung durchgeführt

  function umwandeln(var zahl1, zahl2: Real): Boolean; // unter diesen Bedingungen werden meine Fehlermeldungen ausgelöst
  var
    fcode: integer;
  begin
    Val(edit1.Text, zahl1, fcode);
    Result := fcode = 0;
    if fcode <> 0 then
      MessageBox(0,'Im ersten Eingabefeld steht keine Zahl Bitte Zahl Eingeben'
        +#10#13+'zB.:1,2,3','Fehler',(mb_ok+mb_iconerror));
    Val(edit2.Text,zahl2,fcode);
    Result := Result and (fcode = 0);
    if fcode <> 0 then
      MessageBox(0,'Im zweiten Eingabefeld steht keine Zahl Bitte Zahl Eingeben'
        +#10#13+'zB.:1,2,3','Fehler',(mb_ok+mb_iconerror));
  end;

var
  zahl1, zahl2, ergebnis: real;
  hilfstext: string;
begin
  if umwandeln(zahl1, zahl2) and (sender = Button1) then
  begin
    Ergebnis := ((Zahl2 / Zahl1)*3+0.3)*100;
    str(ergebnis:8:2, hilfstext);
    Edit3.Text := hilfstext;
  end;
end;
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.12.08 23:10 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.12.08 00:28 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Danke für den Hinweis, wollte jedoch dieses Forum nicht zumüllen weil sich das zweite Problem genauso mit einer MessageBox befasst.
Worum es dabei geht ist, dass jemand, der später nach einem Thema sucht und eins mit einem passenden Titel findet auch erwartet, dass es darin darum geht und nicht dann um andere Themen.
Umgekehrt, wenn jemand eine später aufgekommene Frage sucht, dann wird er das Thema, in dem es ja um etwas anderes ging nicht finden bzw. nicht beachten. ;-)

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ich gebs gerne zu dass ich ein Delphi Anfänger bin, trotzdem möchte ich immer was dazulernen also nicht böse sein wenn ich mich verhältnismäßig zu euch, dumm anstelle ^^
Es gibt keine dummen Fragen, nur dumme Antworten, da ist dir niemand böse, jeder hat mal angefangen. ;-)
Du solltest dich nur bemühen zu verstehen was genau dein Quelltext macht und nachschauen oder nachfragen, wenn du es nicht weißt. Das meinte ich mit:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube dir ist nicht so ganz klar, was du eigentlich genau machst.
Denn du hast zwar eine Meldung angezeigt, danach aber immer die Berechnung "Zahl2 / Zahl1" ausgeführt, auch wenn es einen Fehler gegeben hatte.

Aber dass dir solche Fehler nicht unbedingt im Code auffallen ist klar. ;-)

Was du deshalb lernen solltest ist debuggen, d.h. Fehlerbehebung:
Heißt: Du setzt einen Haltepunkt auf eine Codezeile. (F5 oder links neben die Zeile klicken)
Danach startest du normal mit F9 das Programm und klickst den Button. Was jetzt passiert ist, dass Delphi das merkt und an der Stelle das Programm anhält wo du den Haltepunkt gesetzt hattest.
Jetzt kannst du mit F7 / F8 schrittweise durch den Code gehen. Dann hättest du hier nämlich gemerkt, dass nach der Anzeige deiner Fehler-Messageboxen der restliche Code inklusive Berechnung (Zahl2 / Zahl1 --> Division durch 0, wenn Zahl1 noch 0 war) trotzdem ausgeführt werden und dort der Fehler aufgetreten ist. ;-)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 25.12.08 01:15 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.12.08 01:17 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Das Debuggen mach ich sowieso immer beim Programmieren, sowohl mit Borland Delphi7 wie auch mit Turbo Pascal.
Außerdem dürfte das Programm mit Fehlerinhalten garnicht compiliert werden.
Beim Debuggen geht es ja gerade nicht um Fehler, die beim Kompilieren auftreten. ;-)
Sondern um genau solche wie einer bei dir aufgetreten ist.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 25.12.08 01:36 
- Nachträglich durch die Entwickler-Ecke gelöscht -