AGB  ·  Datenschutz  ·  Impressum  







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

MessgaeBox und ShowMessage ist riesig

Ein Thema von alf.stefan · begonnen am 3. Jan 2007 · letzter Beitrag vom 19. Jan 2007
Antwort Antwort
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#1

MessgaeBox und ShowMessage ist riesig

  Alt 3. Jan 2007, 12:57
Hallo zusammen

ich habe von Konrad Elektronic ein usb Experimental board von velleman
und habe da eine Oberfläche programmiert mit der man eine Schrittkette ablaufen lassen kann.

Dabei werden Eingänge oder Timeouts in einem eigenen Threat gepollt und dann über eine Action list als Ergebnis in der Application mit TAction.Execute ein Event ausgelöst.

Das hat soweit prima geklappt.

Nun wollte ich auch noch ein Programmaufruf zur Auswertung einbinden.

die Klasse sieht so aus


Delphi-Quellcode:
unit Chain;

interface
uses Classes, iniFiles, sysUtils;
type TChainStep = class(TObject)
    actString: String;
    outputToSet : byte;
    msToWait: integer;
    inputToWait : smallInt;
    nextStepDann : shortInt;
    nextStepSonst: shortInt;
    next : shortInt;
    callRoutine : string;
end;
type TChain = class(tObject)
  count : word;
  curStep : smallInt;
  curIStat : byte;
  step : Array of TChainStep;
  constructor create;
end;
implementation
constructor TChain.create;
var
  ini : TIniFile;
  stepKey : string;
  cur : shortInt;
  stepText : string;
  lastReached:boolean;
  dir : string;
begin
  DecimalSeparator:='.';
  curStep := -1;
  cur:=1;
  dir := extractFileDir(paramStr(0));
  ini := TIniFile.Create(IncludeTrailingPathDelimiter(dir)+'chain.ini');

  try
     lastReached:=false;
     while not lastReached do
     begin
       stepKey := Format('%s%d',['Step',cur]);
       stepText := ini.ReadString(stepKey,'actString','Not Defined');
       if compareStr(stepText,'Not Defined')=0 then
        lastReached:= true
       else
       begin
         setLength(step, cur);
         step[cur-1] := TChainStep.Create;
         step[cur-1].actString := stepText;
         step[cur-1].outputToSet := ini.ReadInteger(stepKey,'outPut',0); // setze output 1
         step[cur-1].msToWait := ini.ReadInteger(stepKey,'msToWait',0); // warte unendlich
         step[cur-1].inputToWait := ini.ReadInteger(stepKey,'inputToWait',0); // auf input 2
         step[cur-1].nextStepDann:= ini.ReadInteger(stepKey,'nextStepDann',1)-1;// ergebnis gibts im nächsten schritt
         step[cur-1].nextStepSonst :=ini.ReadInteger(stepKey,'nextStepSonst',0)-1;//
         step[cur-1].callRoutine := ini.ReadString(stepKey,'callRoutine','');;
         inc(cur);
       end;
     end;//while
  finally
    ini.Free;
  end;
end;
end.
die Schrittkette ist ein Inifile und im Anhang
bei Step 5 ist eine Callroutine eingetragen die in der Application
Delphi-Quellcode:
...
    AskFor: TAction;
...
deklariert ist.

Wenn jetzt der Schritt mit der callRoutine kommt wird sie so aufgerufen

Delphi-Quellcode:


  if chain.step[actChain.Tag].callRoutine<>'then
  begin
     foundComponent := FindComponent(chain.step[actChain.Tag].callRoutine);
     Memo1.Lines.Append(foundComponent.Name);
     Memo1.Lines.Append(foundComponent.ClassName);
     TAction(foundComponent).Execute;
     if TAction(foundComponent).Tag = mrYes then
        actChain.Tag := chain.step[actChain.Tag].nextStepDann
     else actChain.Tag := chain.step[actChain.Tag].nextStepSonst;

     Memo1.Lines.Append(chain.step[actChain.Tag].actString);
  end;
wenn jetzt in askFor execute nur ShowMessage aufgerufen wird füllt die Messgaebox den kompletten Bildschirm und alles darüber hinaus! Scrollen bringt nicht das Fenster ist zu groß!

Bei MessgaeBox oder MessageDlg ist es nicht so schlimm aber das Fenster ist unendlich breit und die Buttons sind irgendwo im Nirwana. siehe screenshot

Kann damit jemand was anfangen??
Hat jemand auch so ein board? (dann kann ich ihm/ihr das ganze projekt ja mal zuschicken)

hoffe auf hilfe

Gruß stefan
Miniaturansicht angehängter Grafiken
screenshot_663.jpg  
Angehängte Dateien
Dateityp: ini chain_195.ini (672 Bytes, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: MessgaeBox und ShowMessage ist riesig

  Alt 3. Jan 2007, 13:00
Kontrollier mal ob lauter Leerzeichen im anzuzeigenden Text sind. Evtl. mal mit Trim entfernen lassen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#3

Re: MessgaeBox und ShowMessage ist riesig

  Alt 3. Jan 2007, 13:06
hallo bernhard
Das schlimme an der Sache ist, dass dieses überbreite Fenster nur beim ersten Aufruf immer und sonst nur gelegentlich kommt.
d.h. ich bin mir sicher, dass es da keine leerzeichen gibt. Auserdem ist es ein 'händisch' eingetragener Text!

Trotzdem Danke
Gruß
Stefan
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#4

Re: MessgaeBox und ShowMessage ist riesig

  Alt 19. Jan 2007, 07:01
Ich hab den Fehler gefunden!!

Es ist das gleiche wie bei meiner Frage: Timage friert ein.

Die TAction ist nicht Threadsicher!! Unschön ist natürlich diese Auswirkung da kommt man nur schwer drauf!

Danke

Gruß Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: MessgaeBox und ShowMessage ist riesig

  Alt 19. Jan 2007, 12:31
Die VCL ist generell nicht threadsicher und das sollte man eigentlich wissen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#6

Re: MessgaeBox und ShowMessage ist riesig

  Alt 19. Jan 2007, 15:33
Ja sollte man aber,
dass ein nicht beachten solch fatale und/oder sporadische Auswirkungen hat war schon der Hammer.
Und es ist schwer solch einem Fehler auf die Spur zu kommen wenn er sich mal eingeschlichen hat.

Hauptsache ich habe was draus gelernt.

Gruß von

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: MessgaeBox und ShowMessage ist riesig

  Alt 19. Jan 2007, 19:24
Zitat von alf.stefan:
dass ein nicht beachten solch fatale und/oder sporadische Auswirkungen hat war schon der Hammer.
Wieso der Hammer? Das sind ja gerade die Auswirkungen der fehlenden Thread-Sicherheit: Es kracht Hin und Wieder ohne das man mit dem Debugger gleich auf die Ursache stößt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:05 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