Einzelnen Beitrag anzeigen

alf.stefan

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

MessgaeBox und ShowMessage ist riesig

  Alt 3. Jan 2007, 13: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